re PR c++/21113 (Jumps into VLA or VM scope not rejected for C++)

PR c++/21113
	* decl.c (decl_jump_unsafe): Consider variably-modified decls.

From-SVN: r209124
This commit is contained in:
Patrick Palka 2014-04-05 02:35:54 +07:00 committed by Jason Merrill
parent 8fe91ca80e
commit 822cc906fd
3 changed files with 31 additions and 4 deletions

View File

@ -1,3 +1,8 @@
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

View File

@ -2785,12 +2785,11 @@ decl_jump_unsafe (tree decl)
|| 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;

View File

@ -0,0 +1,23 @@
// 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" }
;
}
}