re PR c++/48834 (-fno-exceptions causes wrong code generation on C++ code)
PR c++/48834 * tree.c (build_vec_init_expr): Set TREE_SIDE_EFFECTS. Protect an explicit target. From-SVN: r173272
This commit is contained in:
parent
2609a0ce53
commit
0a2cdfe6fd
@ -1,5 +1,9 @@
|
||||
2011-05-02 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/48834
|
||||
* tree.c (build_vec_init_expr): Set TREE_SIDE_EFFECTS.
|
||||
Protect an explicit target.
|
||||
|
||||
PR c++/48446
|
||||
* decl.c (stabilize_save_expr_r, stabilize_vla_size): New.
|
||||
(compute_array_index_type): Revert earlier 48446 changes.
|
||||
|
@ -564,6 +564,7 @@ build_vec_init_expr (tree target, tree init, tree nelts,
|
||||
elt_init = build_vec_init_elt (type, init, complain);
|
||||
|
||||
init = build3 (VEC_INIT_EXPR, type, slot, init, nelts);
|
||||
TREE_SIDE_EFFECTS (init) = true;
|
||||
SET_EXPR_LOCATION (init, input_location);
|
||||
|
||||
if (cxx_dialect >= cxx0x
|
||||
@ -571,7 +572,11 @@ build_vec_init_expr (tree target, tree init, tree nelts,
|
||||
VEC_INIT_EXPR_IS_CONSTEXPR (init) = true;
|
||||
VEC_INIT_EXPR_VALUE_INIT (init) = value_init;
|
||||
|
||||
if (slot != target)
|
||||
if (slot == target)
|
||||
/* If we specified what array we're initializing, make sure
|
||||
we don't override that in cp_gimplify_init_expr. */
|
||||
init = cp_build_compound_expr (init, slot, complain);
|
||||
else
|
||||
{
|
||||
init = build_target_expr (slot, init, complain);
|
||||
TARGET_EXPR_IMPLICIT_P (init) = 1;
|
||||
|
@ -1,3 +1,7 @@
|
||||
2011-05-02 Jason Merrill <jason@redhat.com>
|
||||
|
||||
* g++.dg/init/new31.C: New.
|
||||
|
||||
2011-05-02 Simon Martin <simartin@users.sourceforge.net>
|
||||
|
||||
PR c/35445
|
||||
|
18
gcc/testsuite/g++.dg/init/new31.C
Normal file
18
gcc/testsuite/g++.dg/init/new31.C
Normal file
@ -0,0 +1,18 @@
|
||||
// PR c++/48834
|
||||
// { dg-options -Wuninitialized }
|
||||
// { dg-do run }
|
||||
|
||||
struct S
|
||||
{
|
||||
S ():i (0)
|
||||
{
|
||||
}
|
||||
int i;
|
||||
};
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
S *s = new S[2];
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue
Block a user