From: paolo Date: Wed, 13 Apr 2016 17:11:03 +0000 (+0000) Subject: /cp X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=6c40e18bb6b760db6a5c756907f31a7a91577402;p=thirdparty%2Fgcc.git /cp 2016-04-13 Paolo Carlini PR c++/70635 * pt.c (resolve_typename_type): Fix typos in infinite recursion avoidance mechanism. /testsuite 2016-04-13 Paolo Carlini PR c++/70635 * g++.dg/parse/pr70635.C: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@234953 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index e7d23842c682..8f1ae231521f 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2016-04-13 Paolo Carlini + + PR c++/70635 + * pt.c (resolve_typename_type): Fix typos in infinite recursion + avoidance mechanism. + 2016-04-13 Jason Merrill PR c++/70634 diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index b75ac24e2b94..d066e559d0c7 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 c8061135327f..b16fadcbf360 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2016-04-13 Paolo Carlini + + PR c++/70635 + * g++.dg/parse/pr70635.C: New. + 2016-04-13 Marek Polacek 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 000000000000..0873840daf50 --- /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;