aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/fold-const.c2
-rw-r--r--gcc/testsuite/ChangeLog3
-rw-r--r--gcc/testsuite/gcc.dg/pr67338.c4
4 files changed, 14 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index afb4a52..59be61f 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2017-03-21 Jakub Jelinek <jakub@redhat.com>
+
+ PR c/67338
+ * fold-const.c (round_up_loc): Negate divisor in unsigned type to
+ avoid UB.
+
2017-03-20 Segher Boessenkool <segher@kernel.crashing.org>
PR rtl-optimization/79910
diff --git a/gcc/fold-const.c b/gcc/fold-const.c
index 12445aa..1a9a264 100644
--- a/gcc/fold-const.c
+++ b/gcc/fold-const.c
@@ -14250,7 +14250,7 @@ round_up_loc (location_t loc, tree value, unsigned int divisor)
overflow_p = TREE_OVERFLOW (value);
val += divisor - 1;
- val &= - (int) divisor;
+ val &= (int) -divisor;
if (val == 0)
overflow_p = true;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index c2dc55a..69cf112 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,8 @@
2017-03-21 Jakub Jelinek <jakub@redhat.com>
+ PR c/67338
+ * gcc.dg/pr67338.c: New test.
+
PR c++/35878
* g++.dg/init/pr35878_1.C: Rewrite directives to scan optimized
dump instead of assembler.
diff --git a/gcc/testsuite/gcc.dg/pr67338.c b/gcc/testsuite/gcc.dg/pr67338.c
new file mode 100644
index 0000000..0fdc302
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr67338.c
@@ -0,0 +1,4 @@
+/* PR c/67338 */
+/* { dg-do compile { target *-*-linux* *-*-gnu* } } */
+
+struct S { __attribute__((aligned (1 << 28))) double a; };