aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorSteven Bosscher <stevenb@suse.de>2005-09-19 05:04:58 +0000
committerSteven Bosscher <steven@gcc.gnu.org>2005-09-19 05:04:58 +0000
commit31c304baef95db414d5429ede8767f469a253945 (patch)
tree9e9a80ed7c0c194680c9e165cc538ad6c898a19f /gcc
parent02c375d90d4e0b486814c915ee7fe8a47afb4716 (diff)
downloadgcc-31c304baef95db414d5429ede8767f469a253945.zip
gcc-31c304baef95db414d5429ede8767f469a253945.tar.gz
gcc-31c304baef95db414d5429ede8767f469a253945.tar.bz2
re PR rtl-optimization/23943 (segv in side_effects_p())
gcc/ PR rtl-optimization/23943 * cse.c (find_best_addr): Never propagate an EXPR_LIST rtx. testsuite/ * gcc.dg/pr23943.c: New test. From-SVN: r104413
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/cse.c4
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.dg/pr23943.c20
4 files changed, 32 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 9da5292..3e7d70a 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2005-09-19 Steven Bosscher <stevenb@suse.de>
+
+ PR rtl-optimization/23943
+ * cse.c (find_best_addr): Never propagate an EXPR_LIST rtx.
+
2005-09-18 Jan Hubicka <jh@suse.cz>
* calls.c (flags_from_decl_or_type): Do not set ECF_LIBCALL_BLOCK.
diff --git a/gcc/cse.c b/gcc/cse.c
index 713b842..defa561 100644
--- a/gcc/cse.c
+++ b/gcc/cse.c
@@ -2999,7 +2999,9 @@ find_best_addr (rtx insn, rtx *loc, enum machine_mode mode)
p = p->next_same_value, count++)
if (! p->flag
&& (REG_P (p->exp)
- || exp_equiv_p (p->exp, p->exp, 1, false)))
+ || (GET_CODE (p->exp) != EXPR_LIST
+ && exp_equiv_p (p->exp, p->exp, 1, false))))
+
{
rtx new = simplify_gen_binary (GET_CODE (*loc), Pmode,
p->exp, op1);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index ee977a6..367ffae 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2005-09-19 Steven Bosscher <stevenb@suse.de>
+
+ * gcc.dg/pr23943.c: New test.
+
2005-09-18 Paul Thomas <pault@gcc.gnu.org>
PR fortran/19181
diff --git a/gcc/testsuite/gcc.dg/pr23943.c b/gcc/testsuite/gcc.dg/pr23943.c
new file mode 100644
index 0000000..f0e60bf
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr23943.c
@@ -0,0 +1,20 @@
+/* This used to ICE in side_effects_p, due to a problem in cse.c.
+ Origin: marcus at jet dot franken dot de. */
+/* { dg-do compile { target x86_64-*-* } } */
+/* { dg-options "-O2 -fPIC" } */
+
+typedef long unsigned int size_t;
+
+extern size_t strlen (__const char *__s)
+ __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
+
+static char savecallsin[256] = "";
+
+int read_agent_config(void)
+{
+ savecallsin[0] = '\0';
+
+ if (savecallsin[strlen(savecallsin) - 1] != '/')
+ __builtin___strncat_chk (savecallsin, "/", sizeof(savecallsin) - strlen(savecallsin) - 1, __builtin_object_size (savecallsin, 2 > 1)) ;
+ return 0;
+}