[PATCH] D158818: [builtins] Fix undefined behavior in negdi2.c and negti2.c
Karl-Johan Karlsson via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Aug 24 23:42:08 PDT 2023
Ka-Ka created this revision.
Ka-Ka added reviewers: MaskRay, phosek.
Herald added a subscriber: Enna1.
Herald added a project: All.
Ka-Ka requested review of this revision.
Herald added a project: Sanitizers.
Herald added a subscriber: Sanitizers.
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.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D158818
Files:
compiler-rt/lib/builtins/negdi2.c
compiler-rt/lib/builtins/negti2.c
Index: compiler-rt/lib/builtins/negti2.c
===================================================================
--- compiler-rt/lib/builtins/negti2.c
+++ 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
Index: compiler-rt/lib/builtins/negdi2.c
===================================================================
--- compiler-rt/lib/builtins/negdi2.c
+++ 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;
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D158818.553379.patch
Type: text/x-patch
Size: 812 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230825/2accb112/attachment.bin>
More information about the llvm-commits
mailing list