From: Joseph Myers Date: Fri, 25 Aug 2006 21:14:24 +0000 (+0100) Subject: [multiple changes] X-Git-Tag: releases/gcc-4.2.0~1647 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a942cc86f86a85fea1342c20091076126c917c34;p=thirdparty%2Fgcc.git [multiple changes] 2006-08-25 Fariborz Jahanian PR c/28418 * c-gimplify.c (gimplify_compound_literal_expr): Don't add variable again if DECL_SEEN_IN_BIND_EXPR_P. 2006-08-25 Joseph S. Myers * gcc.c-torture/compile/compound-literal-1.c: New test. From-SVN: r116436 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 582ea4d8432d..b56d2102577c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2006-08-25 Fariborz Jahanian + + PR c/28418 + * c-gimplify.c (gimplify_compound_literal_expr): Don't add + variable again if DECL_SEEN_IN_BIND_EXPR_P. + 2006-08-25 Joseph S. Myers PR c/28299 diff --git a/gcc/c-gimplify.c b/gcc/c-gimplify.c index 60ef914159fb..7ddc88cf4ea9 100644 --- a/gcc/c-gimplify.c +++ b/gcc/c-gimplify.c @@ -187,7 +187,7 @@ gimplify_compound_literal_expr (tree *expr_p, tree *pre_p) /* This decl isn't mentioned in the enclosing block, so add it to the list of temps. FIXME it seems a bit of a kludge to say that anonymous artificial vars aren't pushed, but everything else is. */ - if (DECL_NAME (decl) == NULL_TREE) + if (DECL_NAME (decl) == NULL_TREE && !DECL_SEEN_IN_BIND_EXPR_P (decl)) gimple_add_tmp_var (decl); gimplify_and_add (decl_s, pre_p); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 85df20fdf7f2..9965dd5c338d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2006-08-25 Joseph S. Myers + + PR c/28418 + * gcc.c-torture/compile/compound-literal-1.c: New test. + 2006-08-25 Joseph S. Myers PR c/28299 diff --git a/gcc/testsuite/gcc.c-torture/compile/compound-literal-1.c b/gcc/testsuite/gcc.c-torture/compile/compound-literal-1.c new file mode 100644 index 000000000000..968bb450a713 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/compound-literal-1.c @@ -0,0 +1,9 @@ +/* ICE incrementing compound literal: bug 28418 from Volker Reichelt + . */ + +struct A { int i; }; + +void foo() +{ + ((struct A) { 0 }).i += 1; +}