Re: [PATCH] Fix PR82488 - signed integer overflow in expr.c

2017-11-26 Thread Jeff Law
On 11/26/2017 02:12 AM, Markus Trippelsdorf wrote:
> 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.
> 
> bootstrap-ubsan on X86_64 and ppc64le. Tested on ppc64le.
> 
> OK for trunk?
> 
>   PR rtl-optimization/82488
>   * expr.c (fixup_args_size_notes): Avoid signed integer overflow.
OK.
jeff


[PATCH] Fix PR82488 - signed integer overflow in expr.c

2017-11-26 Thread Markus Trippelsdorf
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.

bootstrap-ubsan on X86_64 and ppc64le. Tested on ppc64le.

OK for trunk?

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