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:
parent
8fe91ca80e
commit
822cc906fd
@ -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
|
||||
|
@ -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;
|
||||
|
23
gcc/testsuite/g++.dg/ext/vla14.C
Normal file
23
gcc/testsuite/g++.dg/ext/vla14.C
Normal 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" }
|
||||
;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user