diff options
author | Stuart Hastings <stuart@apple.com> | 2005-01-27 01:03:27 +0000 |
---|---|---|
committer | Stuart Hastings <stuart@gcc.gnu.org> | 2005-01-27 01:03:27 +0000 |
commit | 4356a1bf59fa37ac5abeebc13bb2a5676563b7b1 (patch) | |
tree | d1cb899bc25017623d5b6ecc0f17e259e7df6a27 /gcc | |
parent | c006df4eecdd0b1abbaca7728893d3729df10e65 (diff) | |
download | gcc-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/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/gimplify.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/execute/20050125-1.c | 35 |
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; +} |