Skip to content

Commit 908b395

Browse files
committed
rebase
Created using spr 1.3.4
1 parent 0d1e39c commit 908b395

File tree

8 files changed

+38
-195
lines changed

8 files changed

+38
-195
lines changed

clang/docs/LanguageExtensions.rst

Lines changed: 0 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -3464,34 +3464,6 @@ Query for this feature with ``__has_builtin(__builtin_trap)``.
34643464
34653465
``__builtin_arm_trap`` is lowered to the ``llvm.aarch64.break`` builtin, and then to ``brk #payload``.
34663466
3467-
``__builtin_allow_runtime_check``
3468-
---------------------------------
3469-
3470-
``__builtin_allow_runtime_check`` return true if the check at the current program location should be executed.
3471-
3472-
**Syntax**:
3473-
3474-
.. code-block:: c++
3475-
3476-
bool __builtin_allow_runtime_check(const char* kind)
3477-
3478-
**Example of use**:
3479-
3480-
.. code-block:: c++
3481-
3482-
if (__builtin_allow_runtime_check("mycheck") && !ExpensiveCheck()) {
3483-
abort();
3484-
}
3485-
3486-
**Description**
3487-
3488-
``__builtin_allow_runtime_check`` is lowered to ` ``llvm.allow.runtime.check`` <https://llvm.org/docs/LangRef.html#llvm-allow-runtime-check-intrinsic>`_ builtin.
3489-
3490-
The ``__builtin_allow_runtime_check()`` builtin is typically used with control flow
3491-
conditions such as in ``if`` to guard expensive runtime checks. The specific rules for selecting permitted checks can differ and are controlled by the compiler options.
3492-
3493-
Query for this feature with ``__has_builtin(__builtin_allow_runtime_check)``.
3494-
34953467
``__builtin_nondeterministic_value``
34963468
------------------------------------
34973469

clang/include/clang/Basic/Builtins.td

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1164,12 +1164,6 @@ def Unreachable : Builtin {
11641164
let Prototype = "void()";
11651165
}
11661166

1167-
def AllowRuntimeCheck : Builtin {
1168-
let Spellings = ["__builtin_allow_runtime_check"];
1169-
let Attributes = [NoThrow, Pure, Const];
1170-
let Prototype = "bool(char const*)";
1171-
}
1172-
11731167
def ShuffleVector : Builtin {
11741168
let Spellings = ["__builtin_shufflevector"];
11751169
let Attributes = [NoThrow, Const, CustomTypeChecking];

clang/lib/CodeGen/CGBuiltin.cpp

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3435,18 +3435,6 @@ RValue CodeGenFunction::EmitBuiltinExpr(const GlobalDecl GD, unsigned BuiltinID,
34353435
Builder.CreateAssumption(ConstantInt::getTrue(getLLVMContext()), {OBD});
34363436
return RValue::get(nullptr);
34373437
}
3438-
case Builtin::BI__builtin_allow_runtime_check: {
3439-
StringRef Kind =
3440-
cast<StringLiteral>(E->getArg(0)->IgnoreParenCasts())->getString();
3441-
LLVMContext &Ctx = CGM.getLLVMContext();
3442-
llvm::Metadata *KindStr[] = {llvm::MDString::get(Ctx, Kind)};
3443-
llvm::MDNode *KindNode = llvm::MDNode::get(Ctx, KindStr);
3444-
llvm::Value *KindMD = llvm::MetadataAsValue::get(Ctx, KindNode);
3445-
llvm::Value *Allow = Builder.CreateCall(
3446-
CGM.getIntrinsic(llvm::Intrinsic::allow_runtime_check), KindMD);
3447-
3448-
return RValue::get(Allow);
3449-
}
34503438
case Builtin::BI__arithmetic_fence: {
34513439
// Create the builtin call if FastMath is selected, and the target
34523440
// supports the builtin, otherwise just return the argument.

clang/lib/CodeGen/CGExpr.cpp

Lines changed: 1 addition & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -56,13 +56,7 @@ using namespace CodeGen;
5656
// Experiment to make sanitizers easier to debug
5757
static llvm::cl::opt<bool> ClSanitizeDebugDeoptimization(
5858
"ubsan-unique-traps", llvm::cl::Optional,
59-
llvm::cl::desc("Deoptimize traps for UBSAN so there is 1 trap per check."));
60-
61-
// TODO: Introduce frontend options to enabled per sanitizers, similar to
62-
// `fsanitize-trap`.
63-
static llvm::cl::opt<bool> ClSanitizeGuardChecks(
64-
"ubsan-guard-checks", llvm::cl::Optional,
65-
llvm::cl::desc("Guard UBSAN checks with `llvm.allow.ubsan.check()`."));
59+
llvm::cl::desc("Deoptimize traps for UBSAN so there is 1 trap per check"));
6660

6761
//===--------------------------------------------------------------------===//
6862
// Miscellaneous Helper Methods
@@ -3528,17 +3522,6 @@ void CodeGenFunction::EmitCheck(
35283522
Cond = Cond ? Builder.CreateAnd(Cond, Check) : Check;
35293523
}
35303524

3531-
if (ClSanitizeGuardChecks) {
3532-
llvm::Value *Allow =
3533-
Builder.CreateCall(CGM.getIntrinsic(llvm::Intrinsic::allow_ubsan_check),
3534-
llvm::ConstantInt::get(CGM.Int8Ty, CheckHandler));
3535-
3536-
for (llvm::Value **Cond : {&FatalCond, &RecoverableCond, &TrapCond}) {
3537-
if (*Cond)
3538-
*Cond = Builder.CreateOr(*Cond, Builder.CreateNot(Allow));
3539-
}
3540-
}
3541-
35423525
if (TrapCond)
35433526
EmitTrapCheck(TrapCond, CheckHandler);
35443527
if (!FatalCond && !RecoverableCond)

clang/lib/Sema/SemaChecking.cpp

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3235,17 +3235,6 @@ Sema::CheckBuiltinFunctionCall(FunctionDecl *FDecl, unsigned BuiltinID,
32353235
if (SemaBuiltinCountZeroBitsGeneric(*this, TheCall))
32363236
return ExprError();
32373237
break;
3238-
3239-
case Builtin::BI__builtin_allow_runtime_check: {
3240-
Expr *Arg = TheCall->getArg(0);
3241-
// Check if the argument is a string literal.
3242-
if (!isa<StringLiteral>(Arg->IgnoreParenImpCasts())) {
3243-
Diag(TheCall->getBeginLoc(), diag::err_expr_not_string_literal)
3244-
<< Arg->getSourceRange();
3245-
return ExprError();
3246-
}
3247-
break;
3248-
}
32493238
}
32503239

32513240
if (getLangOpts().HLSL && CheckHLSLBuiltinFunctionCall(BuiltinID, TheCall))

clang/test/CodeGen/allow-ubsan-check.c

Lines changed: 37 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 4
2-
// RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -emit-llvm -o - %s -fsanitize=signed-integer-overflow,integer-divide-by-zero,null -mllvm -ubsan-guard-checks | FileCheck %s
3-
// RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -emit-llvm -o - %s -fsanitize=signed-integer-overflow,integer-divide-by-zero,null -mllvm -ubsan-guard-checks -fsanitize-trap=signed-integer-overflow,integer-divide-by-zero,null | FileCheck %s --check-prefixes=TRAP
4-
// RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -emit-llvm -o - %s -fsanitize=signed-integer-overflow,integer-divide-by-zero,null -mllvm -ubsan-guard-checks -fsanitize-recover=signed-integer-overflow,integer-divide-by-zero,null | FileCheck %s --check-prefixes=RECOVER
2+
// RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -emit-llvm -o - %s -fsanitize=signed-integer-overflow,integer-divide-by-zero,null | FileCheck %s
3+
// RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -emit-llvm -o - %s -fsanitize=signed-integer-overflow,integer-divide-by-zero,null -fsanitize-trap=signed-integer-overflow,integer-divide-by-zero,null | FileCheck %s --check-prefixes=TRAP
4+
// RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -emit-llvm -o - %s -fsanitize=signed-integer-overflow,integer-divide-by-zero,null -fsanitize-recover=signed-integer-overflow,integer-divide-by-zero,null | FileCheck %s --check-prefixes=RECOVER
55

66

77
// CHECK-LABEL: define dso_local i32 @div(
@@ -18,14 +18,11 @@
1818
// CHECK-NEXT: [[TMP4:%.*]] = icmp ne i32 [[TMP1]], -1, !nosanitize [[META2]]
1919
// CHECK-NEXT: [[OR:%.*]] = or i1 [[TMP3]], [[TMP4]], !nosanitize [[META2]]
2020
// CHECK-NEXT: [[TMP5:%.*]] = and i1 [[TMP2]], [[OR]], !nosanitize [[META2]]
21-
// CHECK-NEXT: [[TMP6:%.*]] = call i1 @llvm.allow.ubsan.check(i8 3), !nosanitize [[META2]]
22-
// CHECK-NEXT: [[TMP7:%.*]] = xor i1 [[TMP6]], true, !nosanitize [[META2]]
23-
// CHECK-NEXT: [[TMP8:%.*]] = or i1 [[TMP5]], [[TMP7]], !nosanitize [[META2]]
24-
// CHECK-NEXT: br i1 [[TMP8]], label [[CONT:%.*]], label [[HANDLER_DIVREM_OVERFLOW:%.*]], !prof [[PROF3:![0-9]+]], !nosanitize [[META2]]
21+
// CHECK-NEXT: br i1 [[TMP5]], label [[CONT:%.*]], label [[HANDLER_DIVREM_OVERFLOW:%.*]], !prof [[PROF3:![0-9]+]], !nosanitize [[META2]]
2522
// CHECK: handler.divrem_overflow:
26-
// CHECK-NEXT: [[TMP9:%.*]] = zext i32 [[TMP0]] to i64, !nosanitize [[META2]]
27-
// CHECK-NEXT: [[TMP10:%.*]] = zext i32 [[TMP1]] to i64, !nosanitize [[META2]]
28-
// CHECK-NEXT: call void @__ubsan_handle_divrem_overflow_abort(ptr @[[GLOB1:[0-9]+]], i64 [[TMP9]], i64 [[TMP10]]) #[[ATTR4:[0-9]+]], !nosanitize [[META2]]
23+
// CHECK-NEXT: [[TMP6:%.*]] = zext i32 [[TMP0]] to i64, !nosanitize [[META2]]
24+
// CHECK-NEXT: [[TMP7:%.*]] = zext i32 [[TMP1]] to i64, !nosanitize [[META2]]
25+
// CHECK-NEXT: call void @__ubsan_handle_divrem_overflow_abort(ptr @[[GLOB1:[0-9]+]], i64 [[TMP6]], i64 [[TMP7]]) #[[ATTR3:[0-9]+]], !nosanitize [[META2]]
2926
// CHECK-NEXT: unreachable, !nosanitize [[META2]]
3027
// CHECK: cont:
3128
// CHECK-NEXT: [[DIV:%.*]] = sdiv i32 [[TMP0]], [[TMP1]]
@@ -45,12 +42,9 @@
4542
// TRAP-NEXT: [[TMP4:%.*]] = icmp ne i32 [[TMP1]], -1, !nosanitize [[META2]]
4643
// TRAP-NEXT: [[OR:%.*]] = or i1 [[TMP3]], [[TMP4]], !nosanitize [[META2]]
4744
// TRAP-NEXT: [[TMP5:%.*]] = and i1 [[TMP2]], [[OR]], !nosanitize [[META2]]
48-
// TRAP-NEXT: [[TMP6:%.*]] = call i1 @llvm.allow.ubsan.check(i8 3), !nosanitize [[META2]]
49-
// TRAP-NEXT: [[TMP7:%.*]] = xor i1 [[TMP6]], true, !nosanitize [[META2]]
50-
// TRAP-NEXT: [[TMP8:%.*]] = or i1 [[TMP5]], [[TMP7]], !nosanitize [[META2]]
51-
// TRAP-NEXT: br i1 [[TMP8]], label [[CONT:%.*]], label [[TRAP:%.*]], !nosanitize [[META2]]
45+
// TRAP-NEXT: br i1 [[TMP5]], label [[CONT:%.*]], label [[TRAP:%.*]], !nosanitize [[META2]]
5246
// TRAP: trap:
53-
// TRAP-NEXT: call void @llvm.ubsantrap(i8 3) #[[ATTR4:[0-9]+]], !nosanitize [[META2]]
47+
// TRAP-NEXT: call void @llvm.ubsantrap(i8 3) #[[ATTR3:[0-9]+]], !nosanitize [[META2]]
5448
// TRAP-NEXT: unreachable, !nosanitize [[META2]]
5549
// TRAP: cont:
5650
// TRAP-NEXT: [[DIV:%.*]] = sdiv i32 [[TMP0]], [[TMP1]]
@@ -70,14 +64,11 @@
7064
// RECOVER-NEXT: [[TMP4:%.*]] = icmp ne i32 [[TMP1]], -1, !nosanitize [[META2]]
7165
// RECOVER-NEXT: [[OR:%.*]] = or i1 [[TMP3]], [[TMP4]], !nosanitize [[META2]]
7266
// RECOVER-NEXT: [[TMP5:%.*]] = and i1 [[TMP2]], [[OR]], !nosanitize [[META2]]
73-
// RECOVER-NEXT: [[TMP6:%.*]] = call i1 @llvm.allow.ubsan.check(i8 3), !nosanitize [[META2]]
74-
// RECOVER-NEXT: [[TMP7:%.*]] = xor i1 [[TMP6]], true, !nosanitize [[META2]]
75-
// RECOVER-NEXT: [[TMP8:%.*]] = or i1 [[TMP5]], [[TMP7]], !nosanitize [[META2]]
76-
// RECOVER-NEXT: br i1 [[TMP8]], label [[CONT:%.*]], label [[HANDLER_DIVREM_OVERFLOW:%.*]], !prof [[PROF3:![0-9]+]], !nosanitize [[META2]]
67+
// RECOVER-NEXT: br i1 [[TMP5]], label [[CONT:%.*]], label [[HANDLER_DIVREM_OVERFLOW:%.*]], !prof [[PROF3:![0-9]+]], !nosanitize [[META2]]
7768
// RECOVER: handler.divrem_overflow:
78-
// RECOVER-NEXT: [[TMP9:%.*]] = zext i32 [[TMP0]] to i64, !nosanitize [[META2]]
79-
// RECOVER-NEXT: [[TMP10:%.*]] = zext i32 [[TMP1]] to i64, !nosanitize [[META2]]
80-
// RECOVER-NEXT: call void @__ubsan_handle_divrem_overflow(ptr @[[GLOB1:[0-9]+]], i64 [[TMP9]], i64 [[TMP10]]) #[[ATTR4:[0-9]+]], !nosanitize [[META2]]
69+
// RECOVER-NEXT: [[TMP6:%.*]] = zext i32 [[TMP0]] to i64, !nosanitize [[META2]]
70+
// RECOVER-NEXT: [[TMP7:%.*]] = zext i32 [[TMP1]] to i64, !nosanitize [[META2]]
71+
// RECOVER-NEXT: call void @__ubsan_handle_divrem_overflow(ptr @[[GLOB1:[0-9]+]], i64 [[TMP6]], i64 [[TMP7]]) #[[ATTR3:[0-9]+]], !nosanitize [[META2]]
8172
// RECOVER-NEXT: br label [[CONT]], !nosanitize [[META2]]
8273
// RECOVER: cont:
8374
// RECOVER-NEXT: [[DIV:%.*]] = sdiv i32 [[TMP0]], [[TMP1]]
@@ -94,17 +85,14 @@ int div(int x, int y) {
9485
// CHECK-NEXT: store ptr [[X]], ptr [[X_ADDR]], align 8
9586
// CHECK-NEXT: [[TMP0:%.*]] = load ptr, ptr [[X_ADDR]], align 8
9687
// CHECK-NEXT: [[TMP1:%.*]] = icmp ne ptr [[TMP0]], null, !nosanitize [[META2]]
97-
// CHECK-NEXT: [[TMP2:%.*]] = call i1 @llvm.allow.ubsan.check(i8 22), !nosanitize [[META2]]
98-
// CHECK-NEXT: [[TMP3:%.*]] = xor i1 [[TMP2]], true, !nosanitize [[META2]]
99-
// CHECK-NEXT: [[TMP4:%.*]] = or i1 [[TMP1]], [[TMP3]], !nosanitize [[META2]]
100-
// CHECK-NEXT: br i1 [[TMP4]], label [[CONT:%.*]], label [[HANDLER_TYPE_MISMATCH:%.*]], !prof [[PROF3]], !nosanitize [[META2]]
88+
// CHECK-NEXT: br i1 [[TMP1]], label [[CONT:%.*]], label [[HANDLER_TYPE_MISMATCH:%.*]], !prof [[PROF3]], !nosanitize [[META2]]
10189
// CHECK: handler.type_mismatch:
102-
// CHECK-NEXT: [[TMP5:%.*]] = ptrtoint ptr [[TMP0]] to i64, !nosanitize [[META2]]
103-
// CHECK-NEXT: call void @__ubsan_handle_type_mismatch_v1_abort(ptr @[[GLOB2:[0-9]+]], i64 [[TMP5]]) #[[ATTR4]], !nosanitize [[META2]]
90+
// CHECK-NEXT: [[TMP2:%.*]] = ptrtoint ptr [[TMP0]] to i64, !nosanitize [[META2]]
91+
// CHECK-NEXT: call void @__ubsan_handle_type_mismatch_v1_abort(ptr @[[GLOB2:[0-9]+]], i64 [[TMP2]]) #[[ATTR3]], !nosanitize [[META2]]
10492
// CHECK-NEXT: unreachable, !nosanitize [[META2]]
10593
// CHECK: cont:
106-
// CHECK-NEXT: [[TMP6:%.*]] = load i32, ptr [[TMP0]], align 4
107-
// CHECK-NEXT: ret i32 [[TMP6]]
94+
// CHECK-NEXT: [[TMP3:%.*]] = load i32, ptr [[TMP0]], align 4
95+
// CHECK-NEXT: ret i32 [[TMP3]]
10896
//
10997
// TRAP-LABEL: define dso_local i32 @null(
11098
// TRAP-SAME: ptr noundef [[X:%.*]]) #[[ATTR0]] {
@@ -113,16 +101,13 @@ int div(int x, int y) {
113101
// TRAP-NEXT: store ptr [[X]], ptr [[X_ADDR]], align 8
114102
// TRAP-NEXT: [[TMP0:%.*]] = load ptr, ptr [[X_ADDR]], align 8
115103
// TRAP-NEXT: [[TMP1:%.*]] = icmp ne ptr [[TMP0]], null, !nosanitize [[META2]]
116-
// TRAP-NEXT: [[TMP2:%.*]] = call i1 @llvm.allow.ubsan.check(i8 22), !nosanitize [[META2]]
117-
// TRAP-NEXT: [[TMP3:%.*]] = xor i1 [[TMP2]], true, !nosanitize [[META2]]
118-
// TRAP-NEXT: [[TMP4:%.*]] = or i1 [[TMP1]], [[TMP3]], !nosanitize [[META2]]
119-
// TRAP-NEXT: br i1 [[TMP4]], label [[CONT:%.*]], label [[TRAP:%.*]], !nosanitize [[META2]]
104+
// TRAP-NEXT: br i1 [[TMP1]], label [[CONT:%.*]], label [[TRAP:%.*]], !nosanitize [[META2]]
120105
// TRAP: trap:
121-
// TRAP-NEXT: call void @llvm.ubsantrap(i8 22) #[[ATTR4]], !nosanitize [[META2]]
106+
// TRAP-NEXT: call void @llvm.ubsantrap(i8 22) #[[ATTR3]], !nosanitize [[META2]]
122107
// TRAP-NEXT: unreachable, !nosanitize [[META2]]
123108
// TRAP: cont:
124-
// TRAP-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 4
125-
// TRAP-NEXT: ret i32 [[TMP5]]
109+
// TRAP-NEXT: [[TMP2:%.*]] = load i32, ptr [[TMP0]], align 4
110+
// TRAP-NEXT: ret i32 [[TMP2]]
126111
//
127112
// RECOVER-LABEL: define dso_local i32 @null(
128113
// RECOVER-SAME: ptr noundef [[X:%.*]]) #[[ATTR0]] {
@@ -131,17 +116,14 @@ int div(int x, int y) {
131116
// RECOVER-NEXT: store ptr [[X]], ptr [[X_ADDR]], align 8
132117
// RECOVER-NEXT: [[TMP0:%.*]] = load ptr, ptr [[X_ADDR]], align 8
133118
// RECOVER-NEXT: [[TMP1:%.*]] = icmp ne ptr [[TMP0]], null, !nosanitize [[META2]]
134-
// RECOVER-NEXT: [[TMP2:%.*]] = call i1 @llvm.allow.ubsan.check(i8 22), !nosanitize [[META2]]
135-
// RECOVER-NEXT: [[TMP3:%.*]] = xor i1 [[TMP2]], true, !nosanitize [[META2]]
136-
// RECOVER-NEXT: [[TMP4:%.*]] = or i1 [[TMP1]], [[TMP3]], !nosanitize [[META2]]
137-
// RECOVER-NEXT: br i1 [[TMP4]], label [[CONT:%.*]], label [[HANDLER_TYPE_MISMATCH:%.*]], !prof [[PROF3]], !nosanitize [[META2]]
119+
// RECOVER-NEXT: br i1 [[TMP1]], label [[CONT:%.*]], label [[HANDLER_TYPE_MISMATCH:%.*]], !prof [[PROF3]], !nosanitize [[META2]]
138120
// RECOVER: handler.type_mismatch:
139-
// RECOVER-NEXT: [[TMP5:%.*]] = ptrtoint ptr [[TMP0]] to i64, !nosanitize [[META2]]
140-
// RECOVER-NEXT: call void @__ubsan_handle_type_mismatch_v1(ptr @[[GLOB2:[0-9]+]], i64 [[TMP5]]) #[[ATTR4]], !nosanitize [[META2]]
121+
// RECOVER-NEXT: [[TMP2:%.*]] = ptrtoint ptr [[TMP0]] to i64, !nosanitize [[META2]]
122+
// RECOVER-NEXT: call void @__ubsan_handle_type_mismatch_v1(ptr @[[GLOB2:[0-9]+]], i64 [[TMP2]]) #[[ATTR3]], !nosanitize [[META2]]
141123
// RECOVER-NEXT: br label [[CONT]], !nosanitize [[META2]]
142124
// RECOVER: cont:
143-
// RECOVER-NEXT: [[TMP6:%.*]] = load i32, ptr [[TMP0]], align 4
144-
// RECOVER-NEXT: ret i32 [[TMP6]]
125+
// RECOVER-NEXT: [[TMP3:%.*]] = load i32, ptr [[TMP0]], align 4
126+
// RECOVER-NEXT: ret i32 [[TMP3]]
145127
//
146128
int null(int* x) {
147129
return *x;
@@ -160,14 +142,11 @@ int null(int* x) {
160142
// CHECK-NEXT: [[TMP3:%.*]] = extractvalue { i32, i1 } [[TMP2]], 0, !nosanitize [[META2]]
161143
// CHECK-NEXT: [[TMP4:%.*]] = extractvalue { i32, i1 } [[TMP2]], 1, !nosanitize [[META2]]
162144
// CHECK-NEXT: [[TMP5:%.*]] = xor i1 [[TMP4]], true, !nosanitize [[META2]]
163-
// CHECK-NEXT: [[TMP6:%.*]] = call i1 @llvm.allow.ubsan.check(i8 0), !nosanitize [[META2]]
164-
// CHECK-NEXT: [[TMP7:%.*]] = xor i1 [[TMP6]], true, !nosanitize [[META2]]
165-
// CHECK-NEXT: [[TMP8:%.*]] = or i1 [[TMP5]], [[TMP7]], !nosanitize [[META2]]
166-
// CHECK-NEXT: br i1 [[TMP8]], label [[CONT:%.*]], label [[HANDLER_ADD_OVERFLOW:%.*]], !prof [[PROF3]], !nosanitize [[META2]]
145+
// CHECK-NEXT: br i1 [[TMP5]], label [[CONT:%.*]], label [[HANDLER_ADD_OVERFLOW:%.*]], !prof [[PROF3]], !nosanitize [[META2]]
167146
// CHECK: handler.add_overflow:
168-
// CHECK-NEXT: [[TMP9:%.*]] = zext i32 [[TMP0]] to i64, !nosanitize [[META2]]
169-
// CHECK-NEXT: [[TMP10:%.*]] = zext i32 [[TMP1]] to i64, !nosanitize [[META2]]
170-
// CHECK-NEXT: call void @__ubsan_handle_add_overflow_abort(ptr @[[GLOB3:[0-9]+]], i64 [[TMP9]], i64 [[TMP10]]) #[[ATTR4]], !nosanitize [[META2]]
147+
// CHECK-NEXT: [[TMP6:%.*]] = zext i32 [[TMP0]] to i64, !nosanitize [[META2]]
148+
// CHECK-NEXT: [[TMP7:%.*]] = zext i32 [[TMP1]] to i64, !nosanitize [[META2]]
149+
// CHECK-NEXT: call void @__ubsan_handle_add_overflow_abort(ptr @[[GLOB3:[0-9]+]], i64 [[TMP6]], i64 [[TMP7]]) #[[ATTR3]], !nosanitize [[META2]]
171150
// CHECK-NEXT: unreachable, !nosanitize [[META2]]
172151
// CHECK: cont:
173152
// CHECK-NEXT: ret i32 [[TMP3]]
@@ -185,12 +164,9 @@ int null(int* x) {
185164
// TRAP-NEXT: [[TMP3:%.*]] = extractvalue { i32, i1 } [[TMP2]], 0, !nosanitize [[META2]]
186165
// TRAP-NEXT: [[TMP4:%.*]] = extractvalue { i32, i1 } [[TMP2]], 1, !nosanitize [[META2]]
187166
// TRAP-NEXT: [[TMP5:%.*]] = xor i1 [[TMP4]], true, !nosanitize [[META2]]
188-
// TRAP-NEXT: [[TMP6:%.*]] = call i1 @llvm.allow.ubsan.check(i8 0), !nosanitize [[META2]]
189-
// TRAP-NEXT: [[TMP7:%.*]] = xor i1 [[TMP6]], true, !nosanitize [[META2]]
190-
// TRAP-NEXT: [[TMP8:%.*]] = or i1 [[TMP5]], [[TMP7]], !nosanitize [[META2]]
191-
// TRAP-NEXT: br i1 [[TMP8]], label [[CONT:%.*]], label [[TRAP:%.*]], !nosanitize [[META2]]
167+
// TRAP-NEXT: br i1 [[TMP5]], label [[CONT:%.*]], label [[TRAP:%.*]], !nosanitize [[META2]]
192168
// TRAP: trap:
193-
// TRAP-NEXT: call void @llvm.ubsantrap(i8 0) #[[ATTR4]], !nosanitize [[META2]]
169+
// TRAP-NEXT: call void @llvm.ubsantrap(i8 0) #[[ATTR3]], !nosanitize [[META2]]
194170
// TRAP-NEXT: unreachable, !nosanitize [[META2]]
195171
// TRAP: cont:
196172
// TRAP-NEXT: ret i32 [[TMP3]]
@@ -208,14 +184,11 @@ int null(int* x) {
208184
// RECOVER-NEXT: [[TMP3:%.*]] = extractvalue { i32, i1 } [[TMP2]], 0, !nosanitize [[META2]]
209185
// RECOVER-NEXT: [[TMP4:%.*]] = extractvalue { i32, i1 } [[TMP2]], 1, !nosanitize [[META2]]
210186
// RECOVER-NEXT: [[TMP5:%.*]] = xor i1 [[TMP4]], true, !nosanitize [[META2]]
211-
// RECOVER-NEXT: [[TMP6:%.*]] = call i1 @llvm.allow.ubsan.check(i8 0), !nosanitize [[META2]]
212-
// RECOVER-NEXT: [[TMP7:%.*]] = xor i1 [[TMP6]], true, !nosanitize [[META2]]
213-
// RECOVER-NEXT: [[TMP8:%.*]] = or i1 [[TMP5]], [[TMP7]], !nosanitize [[META2]]
214-
// RECOVER-NEXT: br i1 [[TMP8]], label [[CONT:%.*]], label [[HANDLER_ADD_OVERFLOW:%.*]], !prof [[PROF3]], !nosanitize [[META2]]
187+
// RECOVER-NEXT: br i1 [[TMP5]], label [[CONT:%.*]], label [[HANDLER_ADD_OVERFLOW:%.*]], !prof [[PROF3]], !nosanitize [[META2]]
215188
// RECOVER: handler.add_overflow:
216-
// RECOVER-NEXT: [[TMP9:%.*]] = zext i32 [[TMP0]] to i64, !nosanitize [[META2]]
217-
// RECOVER-NEXT: [[TMP10:%.*]] = zext i32 [[TMP1]] to i64, !nosanitize [[META2]]
218-
// RECOVER-NEXT: call void @__ubsan_handle_add_overflow(ptr @[[GLOB3:[0-9]+]], i64 [[TMP9]], i64 [[TMP10]]) #[[ATTR4]], !nosanitize [[META2]]
189+
// RECOVER-NEXT: [[TMP6:%.*]] = zext i32 [[TMP0]] to i64, !nosanitize [[META2]]
190+
// RECOVER-NEXT: [[TMP7:%.*]] = zext i32 [[TMP1]] to i64, !nosanitize [[META2]]
191+
// RECOVER-NEXT: call void @__ubsan_handle_add_overflow(ptr @[[GLOB3:[0-9]+]], i64 [[TMP6]], i64 [[TMP7]]) #[[ATTR3]], !nosanitize [[META2]]
219192
// RECOVER-NEXT: br label [[CONT]], !nosanitize [[META2]]
220193
// RECOVER: cont:
221194
// RECOVER-NEXT: ret i32 [[TMP3]]

0 commit comments

Comments
 (0)