diff options
author | Paolo Carlini <paolo.carlini@oracle.com> | 2016-04-13 17:11:03 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2016-04-13 17:11:03 +0000 |
commit | 545a4139d5740a179540536774d3ed97ccde6320 (patch) | |
tree | 197e7bc7f0591be5ef92e3cbe4e7064f61270bf7 | |
parent | b3a77f2137ef26d4d74cc40af7a42be7901ac98d (diff) | |
download | gcc-545a4139d5740a179540536774d3ed97ccde6320.zip gcc-545a4139d5740a179540536774d3ed97ccde6320.tar.gz gcc-545a4139d5740a179540536774d3ed97ccde6320.tar.bz2 |
re PR c++/70635 (ICE on (and rejects) valid code on x86_64-linux-gnu: Segmentation fault (program cc1plus))
/cp
2016-04-13 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/70635
* pt.c (resolve_typename_type): Fix typos in infinite recursion
avoidance mechanism.
/testsuite
2016-04-13 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/70635
* g++.dg/parse/pr70635.C: New.
From-SVN: r234953
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/pt.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/parse/pr70635.C | 25 |
4 files changed, 38 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index e7d2384..8f1ae23 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 b75ac24..d066e55 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 c806113..b16fadc 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 0000000..0873840 --- /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>; |