[compiler-rt] fb46377 - [builtins] Fix undefined behavior in negdi2.c and negti2.c
Karl-Johan Karlsson via llvm-commits
llvm-commits at lists.llvm.org
Sun Aug 27 21:47:04 PDT 2023
Author: Karl-Johan Karlsson
Date: 2023-08-28T06:39:47+02:00
New Revision: fb463778a7a4b85a5af287c40b957ffd7fcda53e
URL: https://github.com/llvm/llvm-project/commit/fb463778a7a4b85a5af287c40b957ffd7fcda53e
DIFF: https://github.com/llvm/llvm-project/commit/fb463778a7a4b85a5af287c40b957ffd7fcda53e.diff
LOG: [builtins] Fix undefined behavior in negdi2.c and negti2.c
When compiling the builtins with the undefined behavior sanitizer and running testcases you end up with the following warning:
UBSan: negdi2.c:20:10: negation of -9223372036854775808 cannot be represented in type 'di_int' (aka 'long long'); cast to an unsigned type to negate this value to itself
This can be avoided by doing negation in a matching unsigned variant of the type.
The same kind of pattern is found in negti2.c
This was found in an out of tree target.
Reviewed By: MaskRay
Differential Revision: https://reviews.llvm.org/D158818
Added:
Modified:
compiler-rt/lib/builtins/negdi2.c
compiler-rt/lib/builtins/negti2.c
Removed:
################################################################################
diff --git a/compiler-rt/lib/builtins/negdi2.c b/compiler-rt/lib/builtins/negdi2.c
index 5a525d4b0e5541..714ac8ca66d305 100644
--- a/compiler-rt/lib/builtins/negdi2.c
+++ b/compiler-rt/lib/builtins/negdi2.c
@@ -17,5 +17,5 @@
COMPILER_RT_ABI di_int __negdi2(di_int a) {
// Note: this routine is here for API compatibility; any sane compiler
// should expand it inline.
- return -a;
+ return -(du_int)a;
}
diff --git a/compiler-rt/lib/builtins/negti2.c b/compiler-rt/lib/builtins/negti2.c
index d52ba4e13a467a..ab6e09ded819f6 100644
--- a/compiler-rt/lib/builtins/negti2.c
+++ b/compiler-rt/lib/builtins/negti2.c
@@ -19,7 +19,7 @@
COMPILER_RT_ABI ti_int __negti2(ti_int a) {
// Note: this routine is here for API compatibility; any sane compiler
// should expand it inline.
- return -a;
+ return -(tu_int)a;
}
#endif // CRT_HAS_128BIT
More information about the llvm-commits
mailing list