aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/pr96549.c12
-rw-r--r--gcc/tree.c2
2 files changed, 13 insertions, 1 deletions
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr96549.c b/gcc/testsuite/gcc.c-torture/execute/pr96549.c
new file mode 100644
index 0000000..9d992a8
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/pr96549.c
@@ -0,0 +1,12 @@
+/* PR c/96549 */
+
+long c = -1L;
+long b = 0L;
+
+int
+main ()
+{
+ if (3L > (short) ((c ^= (b = 1L)) * 3L))
+ return 0;
+ __builtin_abort ();
+}
diff --git a/gcc/tree.c b/gcc/tree.c
index 6dea32a..d0202c3 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -8877,7 +8877,7 @@ get_narrower (tree op, int *unsignedp_ptr)
v.safe_push (op);
FOR_EACH_VEC_ELT_REVERSE (v, i, op)
ret = build2_loc (EXPR_LOCATION (op), COMPOUND_EXPR,
- TREE_TYPE (win), TREE_OPERAND (op, 0),
+ TREE_TYPE (ret), TREE_OPERAND (op, 0),
ret);
return ret;
}