re PR middle-end/67338 (fold-const sanitizer runtime error in roundup_loc)

PR c/67338
	* fold-const.c (round_up_loc): Negate divisor in unsigned type to
	avoid UB.

	* gcc.dg/pr67338.c: New test.

From-SVN: r246305
This commit is contained in:
Jakub Jelinek 2017-03-21 09:10:30 +01:00 committed by Jakub Jelinek
parent 9da12bea7d
commit 9f30dff0ee
4 changed files with 14 additions and 1 deletions

View File

@ -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

View File

@ -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;

View File

@ -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.

View File

@ -0,0 +1,4 @@
/* PR c/67338 */
/* { dg-do compile { target *-*-linux* *-*-gnu* } } */
struct S { __attribute__((aligned (1 << 28))) double a; };