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
This commit is contained in:
Paolo Carlini 2016-04-13 17:11:03 +00:00 committed by Paolo Carlini
parent b3a77f2137
commit 545a4139d5
4 changed files with 38 additions and 2 deletions

View File

@ -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

View File

@ -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. */

View File

@ -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

View File

@ -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>;