[Bug rtl-optimization/82488] UBSAN in gcc/expr.c:4098:17: runtime error: signed integer overflow: 0 - -9223372036854775808 cannot be represented in type 'long int'
trippels at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Mon Nov 27 05:21:00 GMT 2017
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82488
--- Comment #3 from Markus Trippelsdorf <trippels at gcc dot gnu.org> ---
Author: trippels
Date: Mon Nov 27 05:20:43 2017
New Revision: 255159
URL: https://gcc.gnu.org/viewcvs?rev=255159&root=gcc&view=rev
Log:
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
Modified:
trunk/gcc/ChangeLog
trunk/gcc/expr.c
More information about the Gcc-bugs
mailing list