OSDN Git Service

Fix PR c++/43704
authordodji <dodji@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 19 Apr 2010 09:32:16 +0000 (09:32 +0000)
committerMasaki Muranaka <monaka@monami-software.com>
Sun, 23 May 2010 01:05:51 +0000 (10:05 +0900)
gcc/cp/ChangeLog:
PR c++/43704
* typeck.c (structural_comptypes): Test dependent typedefs
incompatibility before testing for their main variant based
equivalence.

gcc/testsuite/ChangeLog:
PR c++/43704
* g++.dg/template/typedef32.C: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@158508 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/cp/ChangeLog
gcc/cp/typeck.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/template/typedef32.C

index 208b745..64a440d 100644 (file)
@@ -1,3 +1,10 @@
+2010-04-19  Dodji Seketeli  <dodji@redhat.com>
+
+       PR c++/43704
+       * typeck.c (structural_comptypes): Test dependent typedefs
+       incompatibility before testing for their main variant based
+       equivalence.
+
 2010-04-19  Jakub Jelinek  <jakub@redhat.com>
 
        * cp-tree.h (SCOPED_ENUM_P, UNSCOPED_ENUM_P, SET_SCOPED_ENUM_P): Use
index 383754b..c43cf33 100644 (file)
@@ -1236,6 +1236,12 @@ structural_comptypes (tree t1, tree t2, int strict)
   if (TYPE_FOR_JAVA (t1) != TYPE_FOR_JAVA (t2))
     return false;
 
+  /* If T1 and T2 are dependent typedefs then check upfront that
+     the template parameters of their typedef DECLs match before
+     going down checking their subtypes.  */
+  if (incompatible_dependent_types_p (t1, t2))
+    return false;
+
   /* Allow for two different type nodes which have essentially the same
      definition.  Note that we already checked for equality of the type
      qualifiers (just above).  */
@@ -1244,11 +1250,6 @@ structural_comptypes (tree t1, tree t2, int strict)
       && TYPE_MAIN_VARIANT (t1) == TYPE_MAIN_VARIANT (t2))
     return true;
 
-  /* If T1 and T2 are dependent typedefs then check upfront that
-     the template parameters of their typedef DECLs match before
-     going down checking their subtypes.  */
-  if (incompatible_dependent_types_p (t1, t2))
-    return false;
 
   /* Compare the types.  Break out if they could be the same.  */
   switch (TREE_CODE (t1))
index 868ce20..8215f83 100644 (file)
@@ -1,3 +1,8 @@
+2010-04-19  Dodji Seketeli  <dodji@redhat.com>
+
+       PR c++/43704
+       * g++.dg/template/typedef32.C: New test.
+
 2010-04-19 Ira Rosen <irar@il.ibm.com>
 
        PR tree-optimization/37027      
index b32e66c..b3c4b90 100644 (file)
@@ -10,13 +10,12 @@ struct if_
 template<class I1>
 struct iterator_restrict_traits
 {
-    struct iterator_category {};
 };
 
 template<class T>
-struct matrix
+class matrix
 {
struct ci {struct ic {};};
class ci {};
  class i {};
 };