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:
Jason Merrill 2011-05-02 17:59:49 -04:00 committed by Jason Merrill
parent 2609a0ce53
commit 0a2cdfe6fd
4 changed files with 32 additions and 1 deletions

View File

@ -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.

View File

@ -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;

View File

@ -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

View 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;
}