+2015-05-23 Nathan Sidwell <nathan@acm.org>
+
+ PR c++/65936
+ * pt.c (lookup_template_class_1): Copy may_alias attribute too.
+
2015-05-22 Jim Wilson <jim.wilson@linaro.org>
* Make-lang.in (check_g++_parallelize): Update comment.
if (OVERLOAD_TYPE_P (t)
&& !DECL_ALIAS_TEMPLATE_P (gen_tmpl))
{
- if (tree attributes
- = lookup_attribute ("abi_tag", TYPE_ATTRIBUTES (template_type)))
+ static const char *tags[] = {"abi_tag", "may_alias"};
+
+ for (unsigned ix = 0; ix != 2; ix++)
{
- if (!TREE_CHAIN (attributes))
+ tree attributes
+ = lookup_attribute (tags[ix], TYPE_ATTRIBUTES (template_type));
+
+ if (!attributes)
+ ;
+ else if (!TREE_CHAIN (attributes) && !TYPE_ATTRIBUTES (t))
TYPE_ATTRIBUTES (t) = attributes;
else
TYPE_ATTRIBUTES (t)
- = build_tree_list (TREE_PURPOSE (attributes),
- TREE_VALUE (attributes));
+ = tree_cons (TREE_PURPOSE (attributes),
+ TREE_VALUE (attributes),
+ TYPE_ATTRIBUTES (t));
}
}
+2015-05-23 Nathan Sidwell <nathan@acm.org>
+
+ PR c++/65936
+ * g++.dg/template/pr65936.C: New.
+
2015-05-22 Marc Glisse <marc.glisse@inria.fr>
PR tree-optimization/63387
--- /dev/null
+// checking ICE in canonical typing
+
+class A;
+
+template <typename> struct B
+{
+ typedef A type;
+};
+
+template <class T> class C
+ : public B<T>::type
+{
+} __attribute__ ((__may_alias__));
+
+class A
+{
+ operator const C<int> &()
+ {
+ return *static_cast<const C<int> *> (this);
+ }
+};