Skip to content

Commit c5978f4

Browse files
committed
UBSAN: emit distinctive traps
Sometimes people get minimal crash reports after a UBSAN incident. This change tags each trap with an integer representing the kind of failure encountered, which can aid in tracking down the root cause of the problem.
1 parent c54d827 commit c5978f4

File tree

55 files changed

+534
-365
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

55 files changed

+534
-365
lines changed

clang/lib/CodeGen/CGClass.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2803,7 +2803,7 @@ void CodeGenFunction::EmitVTablePtrCheck(const CXXRecordDecl *RD,
28032803
}
28042804

28052805
if (CGM.getCodeGenOpts().SanitizeTrap.has(M)) {
2806-
EmitTrapCheck(TypeTest);
2806+
EmitTrapCheck(TypeTest, SanitizerHandler::CFICheckFail);
28072807
return;
28082808
}
28092809

clang/lib/CodeGen/CGExpr.cpp

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3213,7 +3213,7 @@ void CodeGenFunction::EmitCheck(
32133213
}
32143214

32153215
if (TrapCond)
3216-
EmitTrapCheck(TrapCond);
3216+
EmitTrapCheck(TrapCond, CheckHandler);
32173217
if (!FatalCond && !RecoverableCond)
32183218
return;
32193219

@@ -3408,7 +3408,7 @@ void CodeGenFunction::EmitCfiCheckFail() {
34083408
// Data == nullptr means the calling module has trap behaviour for this check.
34093409
llvm::Value *DataIsNotNullPtr =
34103410
Builder.CreateICmpNE(Data, llvm::ConstantPointerNull::get(Int8PtrTy));
3411-
EmitTrapCheck(DataIsNotNullPtr);
3411+
EmitTrapCheck(DataIsNotNullPtr, SanitizerHandler::CFICheckFail);
34123412

34133413
llvm::StructType *SourceLocationTy =
34143414
llvm::StructType::get(VoidPtrTy, Int32Ty, Int32Ty);
@@ -3447,7 +3447,7 @@ void CodeGenFunction::EmitCfiCheckFail() {
34473447
EmitCheck(std::make_pair(Cond, Mask), SanitizerHandler::CFICheckFail, {},
34483448
{Data, Addr, ValidVtable});
34493449
else
3450-
EmitTrapCheck(Cond);
3450+
EmitTrapCheck(Cond, SanitizerHandler::CFICheckFail);
34513451
}
34523452

34533453
FinishFunction();
@@ -3467,28 +3467,48 @@ void CodeGenFunction::EmitUnreachable(SourceLocation Loc) {
34673467
Builder.CreateUnreachable();
34683468
}
34693469

3470-
void CodeGenFunction::EmitTrapCheck(llvm::Value *Checked) {
3470+
void CodeGenFunction::EmitTrapCheck(llvm::Value *Checked,
3471+
SanitizerHandler CheckHandlerID) {
34713472
llvm::BasicBlock *Cont = createBasicBlock("cont");
34723473

34733474
// If we're optimizing, collapse all calls to trap down to just one per
3474-
// function to save on code size.
3475+
// check-type per function to save on code size.
3476+
if (TrapBBs.size() <= CheckHandlerID)
3477+
TrapBBs.resize(CheckHandlerID + 1);
3478+
llvm::BasicBlock *&TrapBB = TrapBBs[CheckHandlerID];
3479+
34753480
if (!CGM.getCodeGenOpts().OptimizationLevel || !TrapBB) {
34763481
TrapBB = createBasicBlock("trap");
34773482
Builder.CreateCondBr(Checked, Cont, TrapBB);
34783483
EmitBlock(TrapBB);
3479-
llvm::CallInst *TrapCall = EmitTrapCall(llvm::Intrinsic::trap);
3484+
3485+
llvm::CallInst *TrapCall =
3486+
Builder.CreateCall(CGM.getIntrinsic(llvm::Intrinsic::ubsantrap),
3487+
llvm::ConstantInt::get(CGM.Int8Ty, CheckHandlerID));
3488+
3489+
if (!CGM.getCodeGenOpts().TrapFuncName.empty()) {
3490+
auto A = llvm::Attribute::get(getLLVMContext(), "trap-func-name",
3491+
CGM.getCodeGenOpts().TrapFuncName);
3492+
TrapCall->addAttribute(llvm::AttributeList::FunctionIndex, A);
3493+
}
34803494
TrapCall->setDoesNotReturn();
34813495
TrapCall->setDoesNotThrow();
34823496
Builder.CreateUnreachable();
34833497
} else {
3498+
auto Call = TrapBB->begin();
3499+
assert(isa<llvm::CallInst>(Call) && "Expected call in trap BB");
3500+
3501+
Call->applyMergedLocation(Call->getDebugLoc(),
3502+
Builder.getCurrentDebugLocation());
34843503
Builder.CreateCondBr(Checked, Cont, TrapBB);
34853504
}
34863505

34873506
EmitBlock(Cont);
34883507
}
34893508

34903509
llvm::CallInst *CodeGenFunction::EmitTrapCall(llvm::Intrinsic::ID IntrID) {
3491-
llvm::CallInst *TrapCall = Builder.CreateCall(CGM.getIntrinsic(IntrID));
3510+
llvm::CallInst *TrapCall =
3511+
Builder.CreateCall(CGM.getIntrinsic(IntrID));
34923512

34933513
if (!CGM.getCodeGenOpts().TrapFuncName.empty()) {
34943514
auto A = llvm::Attribute::get(getLLVMContext(), "trap-func-name",

clang/lib/CodeGen/CGExprScalar.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3160,6 +3160,7 @@ Value *ScalarExprEmitter::EmitRem(const BinOpInfo &Ops) {
31603160
Value *ScalarExprEmitter::EmitOverflowCheckedBinOp(const BinOpInfo &Ops) {
31613161
unsigned IID;
31623162
unsigned OpID = 0;
3163+
SanitizerHandler OverflowKind;
31633164

31643165
bool isSigned = Ops.Ty->isSignedIntegerOrEnumerationType();
31653166
switch (Ops.Opcode) {
@@ -3168,18 +3169,21 @@ Value *ScalarExprEmitter::EmitOverflowCheckedBinOp(const BinOpInfo &Ops) {
31683169
OpID = 1;
31693170
IID = isSigned ? llvm::Intrinsic::sadd_with_overflow :
31703171
llvm::Intrinsic::uadd_with_overflow;
3172+
OverflowKind = SanitizerHandler::AddOverflow;
31713173
break;
31723174
case BO_Sub:
31733175
case BO_SubAssign:
31743176
OpID = 2;
31753177
IID = isSigned ? llvm::Intrinsic::ssub_with_overflow :
31763178
llvm::Intrinsic::usub_with_overflow;
3179+
OverflowKind = SanitizerHandler::SubOverflow;
31773180
break;
31783181
case BO_Mul:
31793182
case BO_MulAssign:
31803183
OpID = 3;
31813184
IID = isSigned ? llvm::Intrinsic::smul_with_overflow :
31823185
llvm::Intrinsic::umul_with_overflow;
3186+
OverflowKind = SanitizerHandler::MulOverflow;
31833187
break;
31843188
default:
31853189
llvm_unreachable("Unsupported operation for overflow detection");
@@ -3209,7 +3213,7 @@ Value *ScalarExprEmitter::EmitOverflowCheckedBinOp(const BinOpInfo &Ops) {
32093213
: SanitizerKind::UnsignedIntegerOverflow;
32103214
EmitBinOpCheck(std::make_pair(NotOverflow, Kind), Ops);
32113215
} else
3212-
CGF.EmitTrapCheck(Builder.CreateNot(overflow));
3216+
CGF.EmitTrapCheck(Builder.CreateNot(overflow), OverflowKind);
32133217
return result;
32143218
}
32153219

clang/lib/CodeGen/CodeGenFunction.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1856,7 +1856,7 @@ class CodeGenFunction : public CodeGenTypeCache {
18561856

18571857
llvm::BasicBlock *TerminateLandingPad = nullptr;
18581858
llvm::BasicBlock *TerminateHandler = nullptr;
1859-
llvm::BasicBlock *TrapBB = nullptr;
1859+
llvm::SmallVector<llvm::BasicBlock *, 2> TrapBBs;
18601860

18611861
/// Terminate funclets keyed by parent funclet pad.
18621862
llvm::MapVector<llvm::Value *, llvm::BasicBlock *> TerminateFunclets;
@@ -4465,7 +4465,7 @@ class CodeGenFunction : public CodeGenTypeCache {
44654465

44664466
/// Create a basic block that will call the trap intrinsic, and emit a
44674467
/// conditional branch to it, for the -ftrapv checks.
4468-
void EmitTrapCheck(llvm::Value *Checked);
4468+
void EmitTrapCheck(llvm::Value *Checked, SanitizerHandler CheckHandlerID);
44694469

44704470
/// Emit a call to trap or debugtrap and attach function attribute
44714471
/// "trap-func-name" if specified.

clang/lib/CodeGen/ItaniumCXXABI.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -771,7 +771,7 @@ CGCallee ItaniumCXXABI::EmitLoadOfMemberFunctionPointer(
771771
};
772772

773773
if (CGM.getCodeGenOpts().SanitizeTrap.has(SanitizerKind::CFIMFCall)) {
774-
CGF.EmitTrapCheck(CheckResult);
774+
CGF.EmitTrapCheck(CheckResult, SanitizerHandler::CFICheckFail);
775775
} else {
776776
llvm::Value *AllVtables = llvm::MetadataAsValue::get(
777777
CGM.getLLVMContext(),

clang/test/CodeGen/bounds-checking.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,14 @@
88
// CHECK-LABEL: @f
99
double f(int b, int i) {
1010
double a[b];
11-
// CHECK: call {{.*}} @llvm.trap
11+
// CHECK: call {{.*}} @llvm.{{(ubsan)?trap}}
1212
return a[i];
1313
}
1414

1515
// CHECK-LABEL: @f2
1616
void f2() {
1717
// everything is constant; no trap possible
18-
// CHECK-NOT: call {{.*}} @llvm.trap
18+
// CHECK-NOT: call {{.*}} @llvm.{{(ubsan)?trap}}
1919
int a[2];
2020
a[1] = 42;
2121

@@ -28,7 +28,7 @@ void f2() {
2828
// CHECK-LABEL: @f3
2929
void f3() {
3030
int a[1];
31-
// CHECK: call {{.*}} @llvm.trap
31+
// CHECK: call {{.*}} @llvm.{{(ubsan)?trap}}
3232
a[2] = 1;
3333
}
3434

@@ -37,15 +37,15 @@ union U { int a[0]; int b[1]; int c[2]; };
3737
// CHECK-LABEL: define {{.*}} @f4
3838
int f4(union U *u, int i) {
3939
// a and b are treated as flexible array members.
40-
// CHECK-NOT: @llvm.trap
40+
// CHECK-NOT: @llvm.ubsantrap
4141
return u->a[i] + u->b[i];
4242
// CHECK: }
4343
}
4444

4545
// CHECK-LABEL: define {{.*}} @f5
4646
int f5(union U *u, int i) {
4747
// c is not a flexible array member.
48-
// NONLOCAL: call {{.*}} @llvm.trap
48+
// NONLOCAL: call {{.*}} @llvm.ubsantrap
4949
return u->c[i];
5050
// CHECK: }
5151
}

clang/test/CodeGen/catch-alignment-assumption-attribute-align_value-on-lvalue.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ char **load_from_ac_struct(struct ac_struct *x) {
2929
// CHECK-SANITIZE: [[HANDLER_ALIGNMENT_ASSUMPTION]]:
3030
// CHECK-SANITIZE-NORECOVER-NEXT: call void @__ubsan_handle_alignment_assumption_abort(i8* bitcast ({ {{{.*}}}, {{{.*}}}, {{{.*}}}* }* @[[LINE_100_ALIGNMENT_ASSUMPTION]] to i8*), i64 %[[PTRINT_DUP]], i64 2147483648, i64 0){{.*}}, !nosanitize
3131
// CHECK-SANITIZE-RECOVER-NEXT: call void @__ubsan_handle_alignment_assumption(i8* bitcast ({ {{{.*}}}, {{{.*}}}, {{{.*}}}* }* @[[LINE_100_ALIGNMENT_ASSUMPTION]] to i8*), i64 %[[PTRINT_DUP]], i64 2147483648, i64 0){{.*}}, !nosanitize
32-
// CHECK-SANITIZE-TRAP-NEXT: call void @llvm.trap(){{.*}}, !nosanitize
32+
// CHECK-SANITIZE-TRAP-NEXT: call void @llvm.ubsantrap(i8 23){{.*}}, !nosanitize
3333
// CHECK-SANITIZE-UNREACHABLE-NEXT: unreachable, !nosanitize
3434
// CHECK-SANITIZE: [[CONT]]:
3535
// CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(i8** %[[A]], i64 2147483648) ]

clang/test/CodeGen/catch-alignment-assumption-attribute-align_value-on-paramvar.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ char **passthrough(__attribute__((align_value(0x80000000))) char **x) {
2121
// CHECK-SANITIZE: [[HANDLER_ALIGNMENT_ASSUMPTION]]:
2222
// CHECK-SANITIZE-NORECOVER-NEXT: call void @__ubsan_handle_alignment_assumption_abort(i8* bitcast ({ {{{.*}}}, {{{.*}}}, {{{.*}}}* }* @[[LINE_100_ALIGNMENT_ASSUMPTION]] to i8*), i64 %[[PTRINT_DUP]], i64 2147483648, i64 0){{.*}}, !nosanitize
2323
// CHECK-SANITIZE-RECOVER-NEXT: call void @__ubsan_handle_alignment_assumption(i8* bitcast ({ {{{.*}}}, {{{.*}}}, {{{.*}}}* }* @[[LINE_100_ALIGNMENT_ASSUMPTION]] to i8*), i64 %[[PTRINT_DUP]], i64 2147483648, i64 0){{.*}}, !nosanitize
24-
// CHECK-SANITIZE-TRAP-NEXT: call void @llvm.trap(){{.*}}, !nosanitize
24+
// CHECK-SANITIZE-TRAP-NEXT: call void @llvm.ubsantrap(i8 23){{.*}}, !nosanitize
2525
// CHECK-SANITIZE-UNREACHABLE-NEXT: unreachable, !nosanitize
2626
// CHECK-SANITIZE: [[CONT]]:
2727
// CHECK-SANITIZE-NEXT: call void @llvm.assume(i1 true) [ "align"(i8** %[[X_RELOADED]], i64 2147483648) ]

clang/test/CodeGen/catch-alignment-assumption-attribute-alloc_align-on-function-variable.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ char **caller(char **x, unsigned long alignment) {
3939
// CHECK-SANITIZE: [[HANDLER_ALIGNMENT_ASSUMPTION]]:
4040
// CHECK-SANITIZE-NORECOVER-NEXT: call void @__ubsan_handle_alignment_assumption_abort(i8* bitcast ({ {{{.*}}}, {{{.*}}}, {{{.*}}}* }* @[[LINE_100_ALIGNMENT_ASSUMPTION]] to i8*), i64 %[[PTRINT_DUP]], i64 %[[ALIGNMENT_RELOADED]], i64 0){{.*}}, !nosanitize
4141
// CHECK-SANITIZE-RECOVER-NEXT: call void @__ubsan_handle_alignment_assumption(i8* bitcast ({ {{{.*}}}, {{{.*}}}, {{{.*}}}* }* @[[LINE_100_ALIGNMENT_ASSUMPTION]] to i8*), i64 %[[PTRINT_DUP]], i64 %[[ALIGNMENT_RELOADED]], i64 0){{.*}}, !nosanitize
42-
// CHECK-SANITIZE-TRAP-NEXT: call void @llvm.trap(){{.*}}, !nosanitize
42+
// CHECK-SANITIZE-TRAP-NEXT: call void @llvm.ubsantrap(i8 23){{.*}}, !nosanitize
4343
// CHECK-SANITIZE-UNREACHABLE-NEXT: unreachable, !nosanitize
4444
// CHECK-SANITIZE: [[CONT]]:
4545
// CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(i8** %[[X_RETURNED]], i64 %1) ]

clang/test/CodeGen/catch-alignment-assumption-attribute-alloc_align-on-function.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ char **caller(char **x) {
3636
// CHECK-SANITIZE: [[HANDLER_ALIGNMENT_ASSUMPTION]]:
3737
// CHECK-SANITIZE-NORECOVER-NEXT: call void @__ubsan_handle_alignment_assumption_abort(i8* bitcast ({ {{{.*}}}, {{{.*}}}, {{{.*}}}* }* @[[LINE_100_ALIGNMENT_ASSUMPTION]] to i8*), i64 %[[PTRINT_DUP]], i64 128, i64 0){{.*}}, !nosanitize
3838
// CHECK-SANITIZE-RECOVER-NEXT: call void @__ubsan_handle_alignment_assumption(i8* bitcast ({ {{{.*}}}, {{{.*}}}, {{{.*}}}* }* @[[LINE_100_ALIGNMENT_ASSUMPTION]] to i8*), i64 %[[PTRINT_DUP]], i64 128, i64 0){{.*}}, !nosanitize
39-
// CHECK-SANITIZE-TRAP-NEXT: call void @llvm.trap(){{.*}}, !nosanitize
39+
// CHECK-SANITIZE-TRAP-NEXT: call void @llvm.ubsantrap(i8 23){{.*}}, !nosanitize
4040
// CHECK-SANITIZE-UNREACHABLE-NEXT: unreachable, !nosanitize
4141
// CHECK-SANITIZE: [[CONT]]:
4242
// CHECK-SANITIZE-NEXT: call void @llvm.assume(i1 true) [ "align"(i8** %[[X_RETURNED]], i64 128) ]

clang/test/CodeGen/catch-alignment-assumption-attribute-assume_aligned-on-function-two-params.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ char **caller(char **x) {
3333
// CHECK-SANITIZE: [[HANDLER_ALIGNMENT_ASSUMPTION]]:
3434
// CHECK-SANITIZE-NORECOVER-NEXT: call void @__ubsan_handle_alignment_assumption_abort(i8* bitcast ({ {{{.*}}}, {{{.*}}}, {{{.*}}}* }* @[[LINE_100_ALIGNMENT_ASSUMPTION]] to i8*), i64 %[[PTRINT_DUP]], i64 2147483648, i64 42){{.*}}, !nosanitize
3535
// CHECK-SANITIZE-RECOVER-NEXT: call void @__ubsan_handle_alignment_assumption(i8* bitcast ({ {{{.*}}}, {{{.*}}}, {{{.*}}}* }* @[[LINE_100_ALIGNMENT_ASSUMPTION]] to i8*), i64 %[[PTRINT_DUP]], i64 2147483648, i64 42){{.*}}, !nosanitize
36-
// CHECK-SANITIZE-TRAP-NEXT: call void @llvm.trap(){{.*}}, !nosanitize
36+
// CHECK-SANITIZE-TRAP-NEXT: call void @llvm.ubsantrap(i8 23){{.*}}, !nosanitize
3737
// CHECK-SANITIZE-UNREACHABLE-NEXT: unreachable, !nosanitize
3838
// CHECK-SANITIZE: [[CONT]]:
3939
// CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(i8** %[[X_RETURNED]], i64 2147483648, i64 42) ]

clang/test/CodeGen/catch-alignment-assumption-attribute-assume_aligned-on-function.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ char **caller(char **x) {
3333
// CHECK-SANITIZE: [[HANDLER_ALIGNMENT_ASSUMPTION]]:
3434
// CHECK-SANITIZE-NORECOVER-NEXT: call void @__ubsan_handle_alignment_assumption_abort(i8* bitcast ({ {{{.*}}}, {{{.*}}}, {{{.*}}}* }* @[[LINE_100_ALIGNMENT_ASSUMPTION]] to i8*), i64 %[[PTRINT_DUP]], i64 128, i64 0){{.*}}, !nosanitize
3535
// CHECK-SANITIZE-RECOVER-NEXT: call void @__ubsan_handle_alignment_assumption(i8* bitcast ({ {{{.*}}}, {{{.*}}}, {{{.*}}}* }* @[[LINE_100_ALIGNMENT_ASSUMPTION]] to i8*), i64 %[[PTRINT_DUP]], i64 128, i64 0){{.*}}, !nosanitize
36-
// CHECK-SANITIZE-TRAP-NEXT: call void @llvm.trap(){{.*}}, !nosanitize
36+
// CHECK-SANITIZE-TRAP-NEXT: call void @llvm.ubsantrap(i8 23){{.*}}, !nosanitize
3737
// CHECK-SANITIZE-UNREACHABLE-NEXT: unreachable, !nosanitize
3838
// CHECK-SANITIZE: [[CONT]]:
3939
// CHECK-SANITIZE-NEXT: call void @llvm.assume(i1 true) [ "align"(i8** %[[X_RETURNED]], i64 128) ]

clang/test/CodeGen/catch-alignment-assumption-builtin_assume_aligned-three-params-variable.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ void *caller(char **x, unsigned long offset) {
2525
// CHECK-SANITIZE: [[HANDLER_ALIGNMENT_ASSUMPTION]]:
2626
// CHECK-SANITIZE-NORECOVER-NEXT: call void @__ubsan_handle_alignment_assumption_abort(i8* bitcast ({ {{{.*}}}, {{{.*}}}, {{{.*}}}* }* @[[LINE_100_ALIGNMENT_ASSUMPTION]] to i8*), i64 %[[PTRINT_DUP]], i64 536870912, i64 %[[OFFSET_RELOADED]]){{.*}}, !nosanitize
2727
// CHECK-SANITIZE-RECOVER-NEXT: call void @__ubsan_handle_alignment_assumption(i8* bitcast ({ {{{.*}}}, {{{.*}}}, {{{.*}}}* }* @[[LINE_100_ALIGNMENT_ASSUMPTION]] to i8*), i64 %[[PTRINT_DUP]], i64 536870912, i64 %[[OFFSET_RELOADED]]){{.*}}, !nosanitize
28-
// CHECK-SANITIZE-TRAP-NEXT: call void @llvm.trap(){{.*}}, !nosanitize
28+
// CHECK-SANITIZE-TRAP-NEXT: call void @llvm.ubsantrap(i8 23){{.*}}, !nosanitize
2929
// CHECK-SANITIZE-UNREACHABLE-NEXT: unreachable, !nosanitize
3030
// CHECK-SANITIZE: [[CONT]]:
3131
// CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(i8* %[[BITCAST]], i64 536870912, i64 %[[OFFSET_RELOADED]]) ]

clang/test/CodeGen/catch-alignment-assumption-builtin_assume_aligned-three-params.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ void *caller(char **x) {
2222
// CHECK-SANITIZE: [[HANDLER_ALIGNMENT_ASSUMPTION]]:
2323
// CHECK-SANITIZE-NORECOVER-NEXT: call void @__ubsan_handle_alignment_assumption_abort(i8* bitcast ({ {{{.*}}}, {{{.*}}}, {{{.*}}}* }* @[[LINE_100_ALIGNMENT_ASSUMPTION]] to i8*), i64 %[[PTRINT_DUP]], i64 536870912, i64 42){{.*}}, !nosanitize
2424
// CHECK-SANITIZE-RECOVER-NEXT: call void @__ubsan_handle_alignment_assumption(i8* bitcast ({ {{{.*}}}, {{{.*}}}, {{{.*}}}* }* @[[LINE_100_ALIGNMENT_ASSUMPTION]] to i8*), i64 %[[PTRINT_DUP]], i64 536870912, i64 42){{.*}}, !nosanitize
25-
// CHECK-SANITIZE-TRAP-NEXT: call void @llvm.trap(){{.*}}, !nosanitize
25+
// CHECK-SANITIZE-TRAP-NEXT: call void @llvm.ubsantrap(i8 23){{.*}}, !nosanitize
2626
// CHECK-SANITIZE-UNREACHABLE-NEXT: unreachable, !nosanitize
2727
// CHECK-SANITIZE: [[CONT]]:
2828
// CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(i8* %[[BITCAST]], i64 536870912, i64 42) ]

clang/test/CodeGen/catch-alignment-assumption-builtin_assume_aligned-two-params.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ void *caller(char **x) {
2121
// CHECK-SANITIZE: [[HANDLER_ALIGNMENT_ASSUMPTION]]:
2222
// CHECK-SANITIZE-NORECOVER-NEXT: call void @__ubsan_handle_alignment_assumption_abort(i8* bitcast ({ {{{.*}}}, {{{.*}}}, {{{.*}}}* }* @[[LINE_100_ALIGNMENT_ASSUMPTION]] to i8*), i64 %[[PTRINT_DUP]], i64 536870912, i64 0){{.*}}, !nosanitize
2323
// CHECK-SANITIZE-RECOVER-NEXT: call void @__ubsan_handle_alignment_assumption(i8* bitcast ({ {{{.*}}}, {{{.*}}}, {{{.*}}}* }* @[[LINE_100_ALIGNMENT_ASSUMPTION]] to i8*), i64 %[[PTRINT_DUP]], i64 536870912, i64 0){{.*}}, !nosanitize
24-
// CHECK-SANITIZE-TRAP-NEXT: call void @llvm.trap(){{.*}}, !nosanitize
24+
// CHECK-SANITIZE-TRAP-NEXT: call void @llvm.ubsantrap(i8 23){{.*}}, !nosanitize
2525
// CHECK-SANITIZE-UNREACHABLE-NEXT: unreachable, !nosanitize
2626
// CHECK-SANITIZE: [[CONT]]:
2727
// CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(i8* %[[BITCAST]], i64 536870912) ]

clang/test/CodeGen/catch-alignment-assumption-openmp.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ void func(char *data) {
2020
// CHECK-SANITIZE: [[HANDLER_ALIGNMENT_ASSUMPTION]]:
2121
// CHECK-SANITIZE-NORECOVER-NEXT: call void @__ubsan_handle_alignment_assumption_abort(i8* bitcast ({ {{{.*}}}, {{{.*}}}, {{{.*}}}* }* @[[LINE_100_ALIGNMENT_ASSUMPTION]] to i8*), i64 %[[PTRINT_DUP]], i64 1073741824, i64 0){{.*}}, !nosanitize
2222
// CHECK-SANITIZE-RECOVER-NEXT: call void @__ubsan_handle_alignment_assumption(i8* bitcast ({ {{{.*}}}, {{{.*}}}, {{{.*}}}* }* @[[LINE_100_ALIGNMENT_ASSUMPTION]] to i8*), i64 %[[PTRINT_DUP]], i64 1073741824, i64 0){{.*}}, !nosanitize
23-
// CHECK-SANITIZE-TRAP-NEXT: call void @llvm.trap(){{.*}}, !nosanitize
23+
// CHECK-SANITIZE-TRAP-NEXT: call void @llvm.ubsantrap(i8 23){{.*}}, !nosanitize
2424
// CHECK-SANITIZE-UNREACHABLE-NEXT: unreachable, !nosanitize
2525
// CHECK-SANITIZE: [[CONT]]:
2626
// CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(i8* %[[DATA_RELOADED]], i64 1073741824) ]

0 commit comments

Comments
 (0)