aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorStuart Hastings <stuart@apple.com>2005-01-27 01:03:27 +0000
committerStuart Hastings <stuart@gcc.gnu.org>2005-01-27 01:03:27 +0000
commit4356a1bf59fa37ac5abeebc13bb2a5676563b7b1 (patch)
treed1cb899bc25017623d5b6ecc0f17e259e7df6a27 /gcc
parentc006df4eecdd0b1abbaca7728893d3729df10e65 (diff)
downloadgcc-4356a1bf59fa37ac5abeebc13bb2a5676563b7b1.zip
gcc-4356a1bf59fa37ac5abeebc13bb2a5676563b7b1.tar.gz
gcc-4356a1bf59fa37ac5abeebc13bb2a5676563b7b1.tar.bz2
gimplify.c (shortcut_cond_expr): Re-compute side-effects.
2005-01-26 Stuart Hastings <stuart@apple.com> * gcc/gimplify.c (shortcut_cond_expr): Re-compute side-effects. * gcc/testsuite/gcc.c-torture/execute/20050125-1.c: New. From-SVN: r94300
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/gimplify.c2
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/20050125-1.c35
3 files changed, 42 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 3f15855..f21d9d2 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2005-01-26 Stuart Hastings <stuart@apple.com>
+
+ * gcc/gimplify.c (shortcut_cond_expr): Re-compute side-effects.
+ * gcc/testsuite/gcc.c-torture/execute/20050125-1.c: New.
+
2005-01-26 Richard Henderson <rth@redhat.com>
PR middle-end/18008
diff --git a/gcc/gimplify.c b/gcc/gimplify.c
index ac9ae14..0fd3943 100644
--- a/gcc/gimplify.c
+++ b/gcc/gimplify.c
@@ -1923,6 +1923,7 @@ shortcut_cond_expr (tree expr)
{
TREE_OPERAND (expr, 0) = TREE_OPERAND (pred, 1);
then_ = shortcut_cond_expr (expr);
+ then_se = then_ && TREE_SIDE_EFFECTS (then_);
pred = TREE_OPERAND (pred, 0);
expr = build (COND_EXPR, void_type_node, pred, then_, NULL_TREE);
}
@@ -1937,6 +1938,7 @@ shortcut_cond_expr (tree expr)
{
TREE_OPERAND (expr, 0) = TREE_OPERAND (pred, 1);
else_ = shortcut_cond_expr (expr);
+ else_se = else_ && TREE_SIDE_EFFECTS (else_);
pred = TREE_OPERAND (pred, 0);
expr = build (COND_EXPR, void_type_node, pred, NULL_TREE, else_);
}
diff --git a/gcc/testsuite/gcc.c-torture/execute/20050125-1.c b/gcc/testsuite/gcc.c-torture/execute/20050125-1.c
new file mode 100644
index 0000000..3dc15b5
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/20050125-1.c
@@ -0,0 +1,35 @@
+/* Verify that the CALL sideeffect isn't optimized away. */
+/* Contributed by Greg Parker 25 Jan 2005 <gparker@apple.com> */
+
+#include <stdlib.h>
+#include <stdio.h>
+
+struct parse {
+ char *next;
+ char *end;
+ int error;
+};
+
+int seterr(struct parse *p, int err)
+{
+ p->error = err;
+ return 0;
+}
+
+void bracket_empty(struct parse *p)
+{
+ if (((p->next < p->end) && (*p->next++) == ']') || seterr(p, 7)) { }
+}
+
+int main(int argc __attribute__((unused)), char **argv __attribute__((unused)))
+{
+ struct parse p;
+ p.next = p.end = (char *)0x12345;
+
+ p.error = 0;
+ bracket_empty(&p);
+ if (p.error != 7)
+ abort ();
+
+ return 0;
+}