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
+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
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). */
&& 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))
+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
--- /dev/null
+// Origin: PR c++/43704
+// { dg-do compile }
+
+template<typename T2, typename T3>
+struct if_
+{
+ typedef T2 type;
+};
+
+template<class I1>
+struct iterator_restrict_traits
+{
+};
+
+template<class T>
+class matrix
+{
+ class ci {};
+ class i {};
+};
+
+template<class M, class TRI>
+struct triangular_adaptor
+{
+ typedef typename if_<typename M::ci,typename M::i>::type ty1;
+ class iterator2 : iterator_restrict_traits<typename ty1::ic>::iterator_category
+ {
+ };
+};
+
+template<class M>
+struct banded_adaptor
+{
+ typedef typename if_<typename M::ci,typename M::i>::type ty1;
+ class iterator1 : iterator_restrict_traits<typename ty1::ic>::iterator_category
+ {
+ };
+};
+
+template<class T>
+struct singular_decomposition
+{
+ banded_adaptor<matrix<double> >::iterator1 it1;
+};
+