https://github.com/thurstond created https://github.com/llvm/llvm-project/pull/120620
… applicable https://github.com/llvm/llvm-project/pull/65972 introduced -ubsan-unique-traps and -bounds-checking-unique-traps, which attach the function size to the ubsantrap intrinsic. https://github.com/llvm/llvm-project/pull/117651 changed ubsan-unique-traps to use nomerge instead of the function size, but did not update -bounds-checking-unique-traps. This patch adds nomerge to bounds-checking-unique-traps. >From 954e3e4096c4e45baf5470aa678a0fee96db7691 Mon Sep 17 00:00:00 2001 From: Thurston Dang <thurs...@google.com> Date: Thu, 19 Dec 2024 18:46:38 +0000 Subject: [PATCH] [BoundsSan] Update BoundsChecking.cpp to use no-merge attribute where applicable https://github.com/llvm/llvm-project/pull/65972 introduced -ubsan-unique-traps and -bounds-checking-unique-traps, which attach the function size to the ubsantrap intrinsic. https://github.com/llvm/llvm-project/pull/117651 changed ubsan-unique-traps to use nomerge instead of the function size, but did not update -bounds-checking-unique-traps. This patch adds nomerge to bounds-checking-unique-traps. --- clang/test/CodeGen/bounds-checking.c | 5 +++-- llvm/lib/Transforms/Instrumentation/BoundsChecking.cpp | 4 +++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/clang/test/CodeGen/bounds-checking.c b/clang/test/CodeGen/bounds-checking.c index f6c4880e70a150..2e0f6fb491e2c8 100644 --- a/clang/test/CodeGen/bounds-checking.c +++ b/clang/test/CodeGen/bounds-checking.c @@ -73,11 +73,11 @@ char B[10]; char B2[10]; // CHECK-LABEL: @f8 void f8(int i, int k) { - // NOOPTLOCAL: call void @llvm.ubsantrap(i8 3) + // NOOPTLOCAL: call void @llvm.ubsantrap(i8 3) #[[ATTR1:[0-9]+]] // NOOPTARRAY: call void @llvm.ubsantrap(i8 18) B[i] = '\0'; - // NOOPTLOCAL: call void @llvm.ubsantrap(i8 5) + // NOOPTLOCAL: call void @llvm.ubsantrap(i8 5) #[[ATTR1:[0-9]+]] // NOOPTARRAY: call void @llvm.ubsantrap(i8 18) B2[k] = '\0'; } @@ -90,3 +90,4 @@ struct S { struct S *f9(int i) { return &s[i]; } +// NOOPTLOCAL: attributes #[[ATTR1]] = { nomerge noreturn nounwind } diff --git a/llvm/lib/Transforms/Instrumentation/BoundsChecking.cpp b/llvm/lib/Transforms/Instrumentation/BoundsChecking.cpp index c86d967716a5a0..1a2dc5984523ec 100644 --- a/llvm/lib/Transforms/Instrumentation/BoundsChecking.cpp +++ b/llvm/lib/Transforms/Instrumentation/BoundsChecking.cpp @@ -196,8 +196,10 @@ static bool addBoundsChecking(Function &F, TargetLibraryInfo &TLI, CallInst *TrapCall; if (DebugTrapBB) { + // Ideally we would use the SanitizerHandler::OutOfBounds constant TrapCall = IRB.CreateIntrinsic( IntrID, {}, ConstantInt::get(IRB.getInt8Ty(), Fn->size())); + TrapCall->addFnAttr(llvm::Attribute::NoMerge); } else { TrapCall = IRB.CreateIntrinsic(IntrID, {}, {}); } @@ -251,4 +253,4 @@ void BoundsCheckingPass::printPipeline( OS << "<rt-abort>"; break; } -} \ No newline at end of file +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits