Patchwork PR c++/48574

login
register
mail settings
Submitter Dodji Seketeli
Date April 13, 2011, 3:02 p.m.
Message ID <m38vveb3dw.fsf@redhat.com>
Download mbox | patch
Permalink /patch/91021/
State New
Headers show

Comments

Dodji Seketeli - April 13, 2011, 3:02 p.m.
Jason Merrill <jason@redhat.com> writes:

> On 04/13/2011 10:23 AM, Jakub Jelinek wrote:
>> Then
>>
>> --- gcc/cp/class.c.jj	2011-04-12 19:43:49.000000000 +0200
>> +++ gcc/cp/class.c	2011-04-13 15:23:07.463670993 +0200
>> @@ -5939,6 +5939,7 @@ fixed_type_or_null (tree instance, int *
>>   	     itself.  */
>>   	  if (TREE_CODE (instance) == VAR_DECL
>>   	&&  DECL_INITIAL (instance)
>> +	&&  !type_dependent_expression_p (DECL_INITIAL (instance))
>>   	&&  !htab_find (ht, instance))
>>   	    {
>>   	      tree type;
>>
>> would be shorter, after that if it returns NULL_TREE.
>
> Yep.

Thanks I am committing this then.

Patch

diff --git a/gcc/cp/class.c b/gcc/cp/class.c
index b6aebae..3216068 100644
--- a/gcc/cp/class.c
+++ b/gcc/cp/class.c
@@ -5939,6 +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))
 	      && !htab_find (ht, instance))
 	    {
 	      tree type;
diff --git a/gcc/testsuite/g++.dg/template/dependent-expr7.C b/gcc/testsuite/g++.dg/template/dependent-expr7.C
new file mode 100644
index 0000000..b246820
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/dependent-expr7.C
@@ -0,0 +1,22 @@ 
+// Origin PR c++/48574
+// { dg-do compile }
+
+struct A
+{
+  virtual void foo();
+};
+
+template <typename T>
+void
+bar(T x)
+{
+  A &b = *x;
+  b.foo ();
+}
+
+void
+foo()
+{
+  A a;
+  bar(&a);
+}