PR c++/21113
* decl.c (decl_jump_unsafe): Consider variably-modified decls.
From-SVN: r209124
+2014-04-04 Patrick Palka <patrick@parcs.ath.cx>
+
+ PR c++/21113
+ * decl.c (decl_jump_unsafe): Consider variably-modified decls.
+
2014-04-04 Fabien ChĂȘne <fabien@gcc.gnu.org>
* class.c (find_abi_tags_r): Check for the return of warning
|| type == error_mark_node)
return 0;
- type = strip_array_types (type);
-
- if (DECL_NONTRIVIALLY_INITIALIZED_P (decl))
+ if (DECL_NONTRIVIALLY_INITIALIZED_P (decl)
+ || variably_modified_type_p (type, NULL_TREE))
return 2;
- if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
+ if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
return 1;
return 0;
--- /dev/null
+// PR c++/21113
+// { dg-options "" }
+
+void
+f (int n)
+{
+ goto label; // { dg-error "from here" }
+ int a[n]; // { dg-error "crosses initialization" }
+label: // { dg-error "jump to label" }
+ ;
+}
+
+void
+g (int n)
+{
+ switch (1)
+ {
+ case 1:
+ int (*a)[n]; // { dg-error "crosses initialization" }
+ default: // { dg-error "jump to case label" }
+ ;
+ }
+}