[clang] [Clang] [CodeGen] UBSan Trap Reasons (PR #145967)
https://github.com/anthonyhatran edited https://github.com/llvm/llvm-project/pull/145967 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [Clang] [CodeGen] UBSan Trap Reasons (PR #145967)
https://github.com/anthonyhatran edited https://github.com/llvm/llvm-project/pull/145967 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [Clang] [CodeGen] UBSan Trap Reasons (PR #145967)
https://github.com/anthonyhatran edited https://github.com/llvm/llvm-project/pull/145967 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [Clang] [CodeGen] UBSan Trap Reasons (PR #145967)
anthonyhatran wrote: Anyways, to address Dan's comments, I changed all test cases so that they utilize `clang_cc1` instead of `clang`. This also meant that I had to change any `-fsanitize=undefined` and `-fsanitize-trap=undefined` to the specific check since `undefined` is a check grouping and is not recognized by front-end. I also adjusted the strings in the switch function to more closely match what was emitted when the test cases were run without `-fsanitize-trap=`, removed the unnecessary bug fix for unreachable, and added all test cases in for each `SanitizerHandler`, aside from `SanitizerHandler::BoundsSafety`. https://github.com/llvm/llvm-project/pull/145967 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] Gsoc ubsan trap reason v2 (PR #145967)
https://github.com/anthonyhatran created https://github.com/llvm/llvm-project/pull/145967 None >From 7bdb672ef70687575b93d099ccfe261eec66d006 Mon Sep 17 00:00:00 2001 From: Anthony Tran Date: Thu, 26 Jun 2025 12:40:05 -0700 Subject: [PATCH 1/2] Addressed most of Dan's comments and added remaining test cases --- clang/lib/CodeGen/CGExpr.cpp | 107 ++ .../CodeGen/ubsan-trap-reason-add-overflow.c | 10 ++ .../ubsan-trap-reason-alignment-assumption.c | 14 +++ .../ubsan-trap-reason-builtin-unreachable.c | 11 ++ .../ubsan-trap-reason-cfi-check-fail.c| 27 + .../ubsan-trap-reason-div-rem-overflow.c | 10 ++ ...an-trap-reason-dynamic-type-cache-miss.cpp | 23 .../ubsan-trap-reason-float-cast-overflow.c | 10 ++ ...ubsan-trap-reason-function-type-mismatch.c | 16 +++ .../ubsan-trap-reason-implicit-conversion.c | 13 +++ .../ubsan-trap-reason-invalid-builtin.c | 11 ++ .../ubsan-trap-reason-invalid-objc-cast.m | 31 + .../ubsan-trap-reason-load-invalid-value.c| 15 +++ .../ubsan-trap-reason-missing-return.cpp | 12 ++ .../CodeGen/ubsan-trap-reason-mul-overflow.c | 10 ++ .../ubsan-trap-reason-negate-overflow.c | 12 ++ .../CodeGen/ubsan-trap-reason-nonnull-arg.c | 16 +++ .../ubsan-trap-reason-nonnull-return.c| 15 +++ .../ubsan-trap-reason-nullability-arg.c | 18 +++ .../ubsan-trap-reason-nullability-return.c| 18 +++ .../CodeGen/ubsan-trap-reason-out-of-bounds.c | 12 ++ .../ubsan-trap-reason-pointer-overflow.c | 16 +++ .../ubsan-trap-reason-shift-out-of-bounds.c | 12 ++ .../CodeGen/ubsan-trap-reason-sub-overflow.c | 10 ++ .../CodeGen/ubsan-trap-reason-type-mismatch.c | 11 ++ ...ubsan-trap-reason-vla-bound-not-positive.c | 14 +++ 26 files changed, 474 insertions(+) create mode 100644 clang/test/CodeGen/ubsan-trap-reason-add-overflow.c create mode 100644 clang/test/CodeGen/ubsan-trap-reason-alignment-assumption.c create mode 100644 clang/test/CodeGen/ubsan-trap-reason-builtin-unreachable.c create mode 100644 clang/test/CodeGen/ubsan-trap-reason-cfi-check-fail.c create mode 100644 clang/test/CodeGen/ubsan-trap-reason-div-rem-overflow.c create mode 100644 clang/test/CodeGen/ubsan-trap-reason-dynamic-type-cache-miss.cpp create mode 100644 clang/test/CodeGen/ubsan-trap-reason-float-cast-overflow.c create mode 100644 clang/test/CodeGen/ubsan-trap-reason-function-type-mismatch.c create mode 100644 clang/test/CodeGen/ubsan-trap-reason-implicit-conversion.c create mode 100644 clang/test/CodeGen/ubsan-trap-reason-invalid-builtin.c create mode 100644 clang/test/CodeGen/ubsan-trap-reason-invalid-objc-cast.m create mode 100644 clang/test/CodeGen/ubsan-trap-reason-load-invalid-value.c create mode 100644 clang/test/CodeGen/ubsan-trap-reason-missing-return.cpp create mode 100644 clang/test/CodeGen/ubsan-trap-reason-mul-overflow.c create mode 100644 clang/test/CodeGen/ubsan-trap-reason-negate-overflow.c create mode 100644 clang/test/CodeGen/ubsan-trap-reason-nonnull-arg.c create mode 100644 clang/test/CodeGen/ubsan-trap-reason-nonnull-return.c create mode 100644 clang/test/CodeGen/ubsan-trap-reason-nullability-arg.c create mode 100644 clang/test/CodeGen/ubsan-trap-reason-nullability-return.c create mode 100644 clang/test/CodeGen/ubsan-trap-reason-out-of-bounds.c create mode 100644 clang/test/CodeGen/ubsan-trap-reason-pointer-overflow.c create mode 100644 clang/test/CodeGen/ubsan-trap-reason-shift-out-of-bounds.c create mode 100644 clang/test/CodeGen/ubsan-trap-reason-sub-overflow.c create mode 100644 clang/test/CodeGen/ubsan-trap-reason-type-mismatch.c create mode 100644 clang/test/CodeGen/ubsan-trap-reason-vla-bound-not-positive.c diff --git a/clang/lib/CodeGen/CGExpr.cpp b/clang/lib/CodeGen/CGExpr.cpp index 85c768807572f..34dba66edfac1 100644 --- a/clang/lib/CodeGen/CGExpr.cpp +++ b/clang/lib/CodeGen/CGExpr.cpp @@ -85,6 +85,97 @@ enum VariableTypeDescriptorKind : uint16_t { //Miscellaneous Helper Methods //======// +<<< HEAD +=== +static llvm::StringRef GetUBSanTrapForHandler(SanitizerHandler ID) { + switch (ID) { + case SanitizerHandler::AddOverflow: +return "Signed integer addition overflowed"; + + case SanitizerHandler::BuiltinUnreachable: +return "_builtin_unreachable(), execution reached an unreachable program " + "point"; + + case SanitizerHandler::CFICheckFail: +return "Control flow integrity check failed"; + + case SanitizerHandler::DivremOverflow: +return "Signed integer divide or remainder overflowed"; + + case SanitizerHandler::DynamicTypeCacheMiss: +return "Dynamic-type cache miss"; + + case SanitizerHandler::FloatCastOverflow: +return "Floating-point to integer conversion overflowed"; + + case SanitizerHandler::FunctionTypeMismatch: +return "Function called with mismatched signature