re PR c++/48574 (ICE)

Fix PR c++/48574

gcc/cp/

	PR c++/48574
	* class.c (fixed_type_or_null): Use type_dependent_p_push to test
	if the instance has a dependent initializer.

gcc/testsuite/

	PR c++/48574
	* g++.dg/template/dependent-expr8.C: New test case.

From-SVN: r173570
This commit is contained in:
Dodji Seketeli 2011-05-09 12:32:06 +00:00 committed by Dodji Seketeli
parent fb55d62e53
commit bae14a373c
4 changed files with 37 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2011-05-09 Dodji Seketeli <dodji@redhat.com>
PR c++/48574
* class.c (fixed_type_or_null): Use type_dependent_p_push to test
if the instance has a dependent initializer.
2011-05-08 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/48816

View File

@ -5939,7 +5939,7 @@ fixed_type_or_null (tree instance, int *nonnull, int *cdtorp)
itself. */
if (TREE_CODE (instance) == VAR_DECL
&& DECL_INITIAL (instance)
&& !type_dependent_expression_p (DECL_INITIAL (instance))
&& !type_dependent_expression_p_push (DECL_INITIAL (instance))
&& !htab_find (ht, instance))
{
tree type;

View File

@ -1,3 +1,8 @@
2011-05-09 Dodji Seketeli <dodji@redhat.com>
PR c++/48574
* g++.dg/template/dependent-expr8.C: New test case.
2011-05-07 Zdenek Dvorak <ook@ucw.cz>
PR tree-optimization/48837

View File

@ -0,0 +1,25 @@
// Origin PR c++/48574
// { dg-options "-std=c++0x" }
// { dg-do compile }
struct A
{
virtual int foo();
};
void baz (int);
template <typename T>
void
bar(T x)
{
A &b = *x;
baz (b.foo ());
}
void
foo()
{
A a;
bar(&a);
}