[clang] [Reland][Clang][CodeGen][UBSan] Add more precise attributes to recoverable ubsan handlers (PR #135135)
Martin Storsjö via cfe-commits
cfe-commits at lists.llvm.org
Sat Apr 19 14:13:03 PDT 2025
mstorsjo wrote:
With https://martin.st/temp/abs-preproc.cpp as input, I run `clang -target i686-w64-mingw32 abs-preproc.cpp -fsanitize=signed-integer-overflow -w -O3 -S -emit-llvm -o abs-out.ll`, and I get the following diff of the output IR after this change:
```diff
--- abs-good.ll 2025-04-20 00:10:20.155904358 +0300
+++ abs-bad.ll 2025-04-20 00:10:30.432882049 +0300
@@ -14,7 +14,7 @@
@7 = private unnamed_addr global { { ptr, i32, i32 }, ptr } { { ptr, i32, i32 } { ptr @.src, i32 481, i32 19 }, ptr @6 }
@8 = private unnamed_addr global { { ptr, i32, i32 }, ptr } { { ptr, i32, i32 } { ptr @.src, i32 482, i32 9 }, ptr @6 }
-; Function Attrs: mustprogress norecurse nounwind
+; Function Attrs: mustprogress norecurse nounwind memory(read, argmem: none, inaccessiblemem: readwrite)
define dso_local noundef i32 @main() local_unnamed_addr #0 {
entry:
%tmp = alloca i64, align 8
@@ -23,20 +23,18 @@
tail call void @__ubsan_handle_negate_overflow(ptr nonnull @2, i32 -2147483648) #2, !nosanitize !6
tail call void @__ubsan_handle_negate_overflow(ptr nonnull @4, i32 -2147483648) #2, !nosanitize !6
tail call void @__ubsan_handle_negate_overflow(ptr nonnull @5, i32 -2147483648) #2, !nosanitize !6
- store i64 -9223372036854775808, ptr %tmp, align 8, !nosanitize !6
%0 = ptrtoint ptr %tmp to i32, !nosanitize !6
call void @__ubsan_handle_negate_overflow(ptr nonnull @7, i32 %0) #2, !nosanitize !6
- store i64 -9223372036854775808, ptr %tmp14, align 8, !nosanitize !6
%1 = ptrtoint ptr %tmp14 to i32, !nosanitize !6
call void @__ubsan_handle_negate_overflow(ptr nonnull @8, i32 %1) #2, !nosanitize !6
ret i32 0
}
-; Function Attrs: uwtable
+; Function Attrs: memory(argmem: read, inaccessiblemem: readwrite) uwtable
declare dso_local void @__ubsan_handle_negate_overflow(ptr, i32) local_unnamed_addr #1
-attributes #0 = { mustprogress norecurse nounwind "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="pentium4" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
-attributes #1 = { uwtable }
+attributes #0 = { mustprogress norecurse nounwind memory(read, argmem: none, inaccessiblemem: readwrite) "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="pentium4" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
+attributes #1 = { memory(argmem: read, inaccessiblemem: readwrite) uwtable }
attributes #2 = { nounwind }
!llvm.module.flags = !{!0, !1, !2}
```
https://github.com/llvm/llvm-project/pull/135135
More information about the cfe-commits
mailing list