+2013-04-03 Jakub Jelinek <jakub@redhat.com>
+
+ PR debug/56819
+ * tree.c (strip_typedefs): Copy NON_DEFAULT_TEMPLATE_ARGS_COUNT
+ from args to new_args.
+ (strip_typedefs_expr): Copy NON_DEFAULT_TEMPLATE_ARGS_COUNT from t to
+ r instead of doing {S,G}ET_NON_DEFAULT_TEMPLATE_ARGS_COUNT.
+
2013-04-01 Jason Merrill <jason@redhat.com>
PR c++/56794
changed = true;
}
if (changed)
- fullname = lookup_template_function (TREE_OPERAND (fullname, 0),
- new_args);
+ {
+ NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_args)
+ = NON_DEFAULT_TEMPLATE_ARGS_COUNT (args);
+ fullname
+ = lookup_template_function (TREE_OPERAND (fullname, 0),
+ new_args);
+ }
else
ggc_free (new_args);
}
r = copy_node (t);
for (i = 0; i < n; ++i)
TREE_VEC_ELT (r, i) = VEC_index (tree, vec, i);
- SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT
- (r, GET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (t));
+ NON_DEFAULT_TEMPLATE_ARGS_COUNT (r)
+ = NON_DEFAULT_TEMPLATE_ARGS_COUNT (t);
}
else
r = t;
--- /dev/null
+// PR debug/56819
+// { dg-do compile }
+// { dg-options "-fcompare-debug" }
+
+template <typename>
+struct A
+{
+ template <typename>
+ struct B;
+};
+
+template <typename>
+struct C
+{
+ typedef int I;
+};
+
+template <typename T>
+class D
+{
+ typedef A <void> E;
+ typedef typename T::template B <E> F;
+ typedef typename C <F>::I I;
+ A <I> foo () { return A<I> (); }
+};
+
+template class D <A <void> >;