aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2017-04-10 13:02:12 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2017-04-10 13:02:12 +0000
commit737237c9b8a6e24949975433a5696d4f12d602db (patch)
tree56bff97fd0b8927570019c435feb7520faeb0cba /gcc
parent541e0d5597169aa3c6ccbfea58df76838db69e28 (diff)
downloadgcc-737237c9b8a6e24949975433a5696d4f12d602db.zip
gcc-737237c9b8a6e24949975433a5696d4f12d602db.tar.gz
gcc-737237c9b8a6e24949975433a5696d4f12d602db.tar.bz2
re PR middle-end/80362 (gcc miscompiles arithmetic with signed char)
2017-04-10 Richard Biener <rguenther@suse.de> PR middle-end/80362 * fold-const.c (fold_binary_loc): Look at unstripped ops when looking for NEGATE_EXPR in -A / -B to A / B folding. * gcc.dg/torture/pr80362.c: New testcase. From-SVN: r246805
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/fold-const.c2
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr80362.c10
4 files changed, 22 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 1e03c02..4a72cf6 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2017-04-10 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/80362
+ * fold-const.c (fold_binary_loc): Look at unstripped ops when
+ looking for NEGATE_EXPR in -A / -B to A / B folding.
+
2017-04-10 Martin Liska <mliska@suse.cz>
PR gcov-profile/80224
diff --git a/gcc/fold-const.c b/gcc/fold-const.c
index b4c117c..524bb0f 100644
--- a/gcc/fold-const.c
+++ b/gcc/fold-const.c
@@ -10205,7 +10205,7 @@ fold_binary_loc (location_t loc,
/* Convert -A / -B to A / B when the type is signed and overflow is
undefined. */
if ((!INTEGRAL_TYPE_P (type) || TYPE_OVERFLOW_UNDEFINED (type))
- && TREE_CODE (arg0) == NEGATE_EXPR
+ && TREE_CODE (op0) == NEGATE_EXPR
&& negate_expr_p (op1))
{
if (INTEGRAL_TYPE_P (type))
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index d579a09..f71cb1a 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,10 @@
2017-04-10 Richard Biener <rguenther@suse.de>
+ PR middle-end/80362
+ * gcc.dg/torture/pr80362.c: New testcase.
+
+2017-04-10 Richard Biener <rguenther@suse.de>
+
PR tree-optimization/80304
* gcc.dg/torture/pr80304.c: New testcase.
diff --git a/gcc/testsuite/gcc.dg/torture/pr80362.c b/gcc/testsuite/gcc.dg/torture/pr80362.c
new file mode 100644
index 0000000..6d22eb0
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr80362.c
@@ -0,0 +1,10 @@
+/* { dg-do run } */
+/* { dg-additional-options "-fstrict-overflow" } */
+
+int main()
+{
+ signed char var_0, var_1 = -128;
+ var_0 = (signed char)(-var_1) / 3;
+ if (var_0 > 0)
+ __builtin_abort();
+}