mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-03-05 00:48:08 +00:00
[builtins] Fix signed shift overflows in absvti2.c and negvti2.c
When compiling the builtins with the undefined behavior sanitizer and running testcases you end up with the following warning: UBSan: negvti2.c:22:32: left shift of 1 by 127 places cannot be represented in type 'ti_int' (aka '__int128') UBSan: absvti2.c:23:23: left shift of 1 by 127 places cannot be represented in type 'ti_int' (aka '__int128') This can be avoided by doing the shift in a matching unsigned variant of the type. This is the same kind of fixes that already was done in commit 854686f0794b9d0695d5a0a85ea1e7e71ba8edfd This was found in an out of tree target. Reviewed By: MaskRay Differential Revision: https://reviews.llvm.org/D158816
This commit is contained in:
parent
4198576157
commit
56255e0421
@ -20,7 +20,7 @@
|
||||
|
||||
COMPILER_RT_ABI ti_int __absvti2(ti_int a) {
|
||||
const int N = (int)(sizeof(ti_int) * CHAR_BIT);
|
||||
if (a == ((ti_int)1 << (N - 1)))
|
||||
if (a == (ti_int)((tu_int)1 << (N - 1)))
|
||||
compilerrt_abort();
|
||||
const ti_int s = a >> (N - 1);
|
||||
return (a ^ s) - s;
|
||||
|
@ -19,7 +19,7 @@
|
||||
// Effects: aborts if -a overflows
|
||||
|
||||
COMPILER_RT_ABI ti_int __negvti2(ti_int a) {
|
||||
const ti_int MIN = (ti_int)1 << ((int)(sizeof(ti_int) * CHAR_BIT) - 1);
|
||||
const ti_int MIN = (tu_int)1 << ((int)(sizeof(ti_int) * CHAR_BIT) - 1);
|
||||
if (a == MIN)
|
||||
compilerrt_abort();
|
||||
return -a;
|
||||
|
Loading…
x
Reference in New Issue
Block a user