diff options
author | jsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-05-21 16:47:32 +0000 |
---|---|---|
committer | jsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-05-21 16:47:32 +0000 |
commit | 0b04a977617a8e2344022aea93a683ccd1113e73 (patch) | |
tree | 5c0d394e45bb331cb69939a779014d433a8cff09 | |
parent | 10073be587a45c11adac98f15f0e75b3e44221e7 (diff) | |
download | gcc-0b04a977617a8e2344022aea93a683ccd1113e73.tar.gz |
PR c/53418
* c-typeck.c (build_conditional_expr): Remove C_MAYBE_CONST_EXPR
from folded operands before wrapping another around the
conditional expression.
testsuite:
* gcc.c-torture/compile/pr53418-1.c,
gcc.c-torture/compile/pr53418-2.c: New tests.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_7-branch@187726 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/c-typeck.c | 5 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/compile/pr53418-1.c | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/compile/pr53418-2.c | 5 |
5 files changed, 28 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2a80c0c81d9..1acd665de13 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2012-05-21 Joseph Myers <joseph@codesourcery.com> + + PR c/53418 + * c-typeck.c (build_conditional_expr): Remove C_MAYBE_CONST_EXPR + from folded operands before wrapping another around the + conditional expression. + 2012-05-21 Dave Boutcher <daveboutcher@gmail.com> Patrick Marlier <patrick.marlier@gmail.com> diff --git a/gcc/c-typeck.c b/gcc/c-typeck.c index fc01a79268e..54018aa0745 100644 --- a/gcc/c-typeck.c +++ b/gcc/c-typeck.c @@ -4410,6 +4410,11 @@ build_conditional_expr (location_t colon_loc, tree ifexp, bool ifexp_bcp, ret = fold_build3_loc (colon_loc, COND_EXPR, result_type, ifexp, op1, op2); else { + if (int_operands) + { + op1 = remove_c_maybe_const_expr (op1); + op2 = remove_c_maybe_const_expr (op2); + } ret = build3 (COND_EXPR, result_type, ifexp, op1, op2); if (int_operands) ret = note_integer_operands (ret); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 19326eba770..3bdea30dbb5 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2012-05-21 Joseph Myers <joseph@codesourcery.com> + + PR c/53418 + * gcc.c-torture/compile/pr53418-1.c, + gcc.c-torture/compile/pr53418-2.c: New tests. + 2012-05-21 Patrick Marlier <patrick.marlier@gmail.com> * gcc.dg/tm/indirect-2.c: New test. diff --git a/gcc/testsuite/gcc.c-torture/compile/pr53418-1.c b/gcc/testsuite/gcc.c-torture/compile/pr53418-1.c new file mode 100644 index 00000000000..721b02d7878 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr53418-1.c @@ -0,0 +1,5 @@ +void +f (void) +{ + int i = (0 ? 1 : 0U / 0); +} diff --git a/gcc/testsuite/gcc.c-torture/compile/pr53418-2.c b/gcc/testsuite/gcc.c-torture/compile/pr53418-2.c new file mode 100644 index 00000000000..a437b6a0e62 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr53418-2.c @@ -0,0 +1,5 @@ +void +f (void) +{ + int i = (1 ? 0U / 0 : 1); +} |