From 58f7fcc3628dbe04c9cfd53da71351c21e6bf03c Mon Sep 17 00:00:00 2001 From: Uros Bizjak Date: Fri, 22 Jun 2007 20:51:28 +0200 Subject: [PATCH] re PR middle-end/32374 (internal compiler error: in reload_cse_simplify_operands, at postreload.c:396) PR middle-end/32374 * expr.c (store_constructor): Do not clobber non-zeroed memory. testsuite/ChangeLog: PR middle-end/32374 * gcc.dg/pr32374.c: New test. From-SVN: r125955 --- gcc/ChangeLog | 5 +++++ gcc/expr.c | 2 +- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.dg/pr32374.c | 20 ++++++++++++++++++++ 4 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.dg/pr32374.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 349272b8480..09f25762d19 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2007-06-19 Uros Bizjak + + PR middle-end/32374 + * expr.c (store_constructor): Do not clobber non-zeroed memory. + 2007-06-22 Uros Bizjak PR target/32413 diff --git a/gcc/expr.c b/gcc/expr.c index 3f0caf117d5..0739b0533bc 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -5062,7 +5062,7 @@ store_constructor (tree exp, rtx target, int cleared, HOST_WIDE_INT size) cleared = 1; } - if (! cleared) + if (REG_P (target) && !cleared) emit_insn (gen_rtx_CLOBBER (VOIDmode, target)); /* Store each element of the constructor into the diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 658ac0c2775..d8ae75c76c6 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2007-06-22 Uros Bizjak + + PR middle-end/32374 + * gcc.dg/pr32374.c: New test. + 2007-06-22 Jerry DeLisle PR fortran/32360 diff --git a/gcc/testsuite/gcc.dg/pr32374.c b/gcc/testsuite/gcc.dg/pr32374.c new file mode 100644 index 00000000000..de15d559f5b --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr32374.c @@ -0,0 +1,20 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +extern int *stderr; + +void f (int *, const char *, ...); + +void g (const char *conf_name) +{ + typedef struct + { + const char *label; + const int value; + } Section; + + const Section sections[2] = { {"", 0}, {"", 1} }; + + f (stderr, "", "", conf_name, 0, sections[0]); + f (stderr, "", "", conf_name, 0, sections[0]); +}