mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-18 04:40:25 +08:00
re PR sanitizer/59503 (Bogus integer-overflow error with long long with -m32)
PR sanitizer/59503 * internal-fn.c (ubsan_expand_si_overflow_addsub_check): Call expand_binop with correct optab depending on code. testsuite/ * c-c++-common/ubsan/pr59503.c: New test. From-SVN: r205984
This commit is contained in:
parent
e575540bb4
commit
7ddf4d5ace
gcc
@ -1,3 +1,9 @@
|
||||
2013-12-14 Marek Polacek <polacek@redhat.com>
|
||||
|
||||
PR sanitizer/59503
|
||||
* internal-fn.c (ubsan_expand_si_overflow_addsub_check): Call
|
||||
expand_binop with correct optab depending on code.
|
||||
|
||||
2013-12-14 Tom de Vries <tom@codesourcery.com>
|
||||
|
||||
* calls.c (expand_call): Fix REG_PARM_STACK_SPACE comparison.
|
||||
|
@ -214,14 +214,14 @@ ubsan_expand_si_overflow_addsub_check (tree_code code, gimple stmt)
|
||||
|
||||
/* Compute the operation. On RTL level, the addition is always
|
||||
unsigned. */
|
||||
res = expand_binop (mode, add_optab, op0, op1,
|
||||
NULL_RTX, false, OPTAB_LIB_WIDEN);
|
||||
res = expand_binop (mode, code == PLUS_EXPR ? add_optab : sub_optab,
|
||||
op0, op1, NULL_RTX, false, OPTAB_LIB_WIDEN);
|
||||
|
||||
/* If the op1 is negative, we have to use a different check. */
|
||||
emit_cmp_and_jump_insns (op1, const0_rtx, LT, NULL_RTX, mode,
|
||||
false, sub_check, PROB_EVEN);
|
||||
|
||||
/* Compare the result of the addition with one of the operands. */
|
||||
/* Compare the result of the operation with one of the operands. */
|
||||
emit_cmp_and_jump_insns (res, op0, code == PLUS_EXPR ? GE : LE,
|
||||
NULL_RTX, mode, false, done_label,
|
||||
PROB_VERY_LIKELY);
|
||||
|
@ -1,3 +1,8 @@
|
||||
2013-12-14 Marek Polacek <polacek@redhat.com>
|
||||
|
||||
PR sanitizer/59503
|
||||
* c-c++-common/ubsan/pr59503.c: New test.
|
||||
|
||||
2013-12-14 Janus Weil <janus@gcc.gnu.org>
|
||||
|
||||
PR fortran/59450
|
||||
|
14
gcc/testsuite/c-c++-common/ubsan/pr59503.c
Normal file
14
gcc/testsuite/c-c++-common/ubsan/pr59503.c
Normal file
@ -0,0 +1,14 @@
|
||||
/* { dg-do run } */
|
||||
/* { dg-options "-fsanitize=signed-integer-overflow" } */
|
||||
/* { dg-skip-if "" { *-*-* } { "-flto" } { "" } } */
|
||||
|
||||
int
|
||||
main (void)
|
||||
{
|
||||
long long int a = 14;
|
||||
long int b = 9;
|
||||
asm volatile ("" : "+r" (a), "+r" (b));
|
||||
if ((a - b) != 5)
|
||||
__builtin_abort ();
|
||||
return 0;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user