commit e63bd3e7471152b3c39cbfc58e735e3efeb458b7
Author: Jason Merrill <jason@redhat.com>
Date: Mon Apr 9 17:24:19 2018 -0400
PR c++/85285 - ICE with flexible array after substitution.
* pt.c (instantiate_class_template_1): Check for flexible array in
union.
@@ -10904,6 +10904,14 @@ instantiate_class_template_1 (tree type)
cxx_incomplete_type_error (r, rtype);
TREE_TYPE (r) = error_mark_node;
}
+ else if (TREE_CODE (rtype) == ARRAY_TYPE
+ && TYPE_DOMAIN (rtype) == NULL_TREE
+ && (TREE_CODE (type) == UNION_TYPE
+ || TREE_CODE (type) == QUAL_UNION_TYPE))
+ {
+ error ("flexible array member %qD in union", r);
+ TREE_TYPE (r) = error_mark_node;
+ }
}
/* If it is a TYPE_DECL for a class-scoped ENUMERAL_TYPE,
new file mode 100644
@@ -0,0 +1,8 @@
+// PR c++/85285
+
+template<typename T> union A
+{
+ T x; // { dg-error "flexible array" }
+};
+
+A<int[]> a;