From: Markus Trippelsdorf Date: Mon, 27 Nov 2017 05:20:43 +0000 (+0000) Subject: Fix PR82488 - signed integer overflow in expr.c X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=99282f81a6bcb5873c2a3c4755f625b5a44a915d;p=gcc.git Fix PR82488 - signed integer overflow in expr.c bootstrap-ubsan shows: gcc/expr.c:4103:17: runtime error: signed integer overflow: 0 - -9223372036854775808 cannot be represented in type 'long int' Fix by handling the saw_unknown case earlier. PR rtl-optimization/82488 * expr.c (fixup_args_size_notes): Avoid signed integer overflow. diff --git a/gcc/expr.c b/gcc/expr.c index ee07de5aaa44..e9d8555c9452 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -4100,10 +4100,13 @@ fixup_args_size_notes (rtx_insn *prev, rtx_insn *last, int end_args_size) if (STACK_GROWS_DOWNWARD) this_delta = -(unsigned HOST_WIDE_INT) this_delta; - args_size -= this_delta; + if (saw_unknown) + args_size = INT_MIN; + else + args_size -= this_delta; } - return saw_unknown ? INT_MIN : args_size; + return args_size; } #ifdef PUSH_ROUNDING -- Markus From-SVN: r255159 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 20c4ab61f1f..dc980a96a0d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2017-11-27 Markus Trippelsdorf + + PR rtl-optimization/82488 + * expr.c (fixup_args_size_notes): Avoid signed integer overflow. + 2017-11-26 Julia Koval * config/i386/i386.c (processor_target_table): Add skylake_cost for diff --git a/gcc/expr.c b/gcc/expr.c index ee07de5aaa4..e9d8555c945 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -4100,10 +4100,13 @@ fixup_args_size_notes (rtx_insn *prev, rtx_insn *last, int end_args_size) if (STACK_GROWS_DOWNWARD) this_delta = -(unsigned HOST_WIDE_INT) this_delta; - args_size -= this_delta; + if (saw_unknown) + args_size = INT_MIN; + else + args_size -= this_delta; } - return saw_unknown ? INT_MIN : args_size; + return args_size; } #ifdef PUSH_ROUNDING