summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/pt.c4
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/parse/pr70635.C25
4 files changed, 38 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index e7d23842c68..8f1ae231521 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2016-04-13 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/70635
+ * pt.c (resolve_typename_type): Fix typos in infinite recursion
+ avoidance mechanism.
+
2016-04-13 Jason Merrill <jason@redhat.com>
PR c++/70634
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index b75ac24e2b9..d066e559d0c 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -23595,9 +23595,9 @@ resolve_typename_type (tree type, bool only_current_p)
{
/* Ill-formed programs can cause infinite recursion here, so we
must catch that. */
- TYPENAME_IS_RESOLVING_P (type) = 1;
+ TYPENAME_IS_RESOLVING_P (result) = 1;
result = resolve_typename_type (result, only_current_p);
- TYPENAME_IS_RESOLVING_P (type) = 0;
+ TYPENAME_IS_RESOLVING_P (result) = 0;
}
/* Qualify the resulting type. */
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index c8061135327..b16fadcbf36 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2016-04-13 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/70635
+ * g++.dg/parse/pr70635.C: New.
+
2016-04-13 Marek Polacek <polacek@redhat.com>
PR c++/70639
diff --git a/gcc/testsuite/g++.dg/parse/pr70635.C b/gcc/testsuite/g++.dg/parse/pr70635.C
new file mode 100644
index 00000000000..0873840daf5
--- /dev/null
+++ b/gcc/testsuite/g++.dg/parse/pr70635.C
@@ -0,0 +1,25 @@
+// PR c++/70635
+// { dg-options "-fpermissive -w" }
+
+template < typename T >
+struct A
+{
+ struct B;
+ typedef typename B::type type;
+};
+
+template < typename T >
+struct A < T >::B
+{
+ typedef typename A < type >::type type; // { dg-error "type" }
+ type Foo ();
+};
+
+template < typename T >
+typename A < T >::B::type
+A < T >::B::Foo ()
+{
+ return 0;
+}
+
+template class A<int>;