Skip to content

Commit 690c6ca

Browse files
committed
Merge commit '2691b964150c' from llvm.org/main into next
2 parents 8f9f8b4 + 2691b96 commit 690c6ca

File tree

9 files changed

+21
-128
lines changed

9 files changed

+21
-128
lines changed

clang/include/clang/Basic/CodeGenOptions.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -382,10 +382,6 @@ class CodeGenOptions : public CodeGenOptionsBase {
382382
/// Set of sanitizer checks that trap rather than diagnose.
383383
SanitizerSet SanitizeTrap;
384384

385-
/// Set of sanitizer checks that can merge handlers (smaller code size at
386-
/// the expense of debuggability).
387-
SanitizerSet SanitizeMergeHandlers;
388-
389385
/// List of backend command-line options for -fembed-bitcode.
390386
std::vector<uint8_t> CmdArgs;
391387

clang/include/clang/Driver/Options.td

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2657,21 +2657,6 @@ def fno_sanitize_trap : Flag<["-"], "fno-sanitize-trap">, Group<f_clang_Group>,
26572657
Alias<fno_sanitize_trap_EQ>, AliasArgs<["all"]>,
26582658
Visibility<[ClangOption, CLOption]>,
26592659
HelpText<"Disable trapping for all sanitizers">;
2660-
def fsanitize_merge_handlers_EQ
2661-
: CommaJoined<["-"], "fsanitize-merge=">,
2662-
Group<f_clang_Group>,
2663-
HelpText<"Allow compiler to merge handlers for specified sanitizers">;
2664-
def fno_sanitize_merge_handlers_EQ
2665-
: CommaJoined<["-"], "fno-sanitize-merge=">,
2666-
Group<f_clang_Group>,
2667-
HelpText<"Do not allow compiler to merge handlers for specified sanitizers">;
2668-
def fsanitize_merge_handlers : Flag<["-"], "fsanitize-merge">, Group<f_clang_Group>,
2669-
Alias<fsanitize_merge_handlers_EQ>, AliasArgs<["all"]>,
2670-
HelpText<"Allow compiler to merge handlers for all sanitizers">;
2671-
def fno_sanitize_merge_handlers : Flag<["-"], "fno-sanitize-merge">, Group<f_clang_Group>,
2672-
Alias<fno_sanitize_merge_handlers_EQ>, AliasArgs<["all"]>,
2673-
Visibility<[ClangOption, CLOption]>,
2674-
HelpText<"Do not allow compiler to merge handlers for any sanitizers">;
26752660
def fsanitize_undefined_trap_on_error
26762661
: Flag<["-"], "fsanitize-undefined-trap-on-error">, Group<f_clang_Group>,
26772662
Alias<fsanitize_trap_EQ>, AliasArgs<["undefined"]>;

clang/include/clang/Driver/SanitizerArgs.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ class SanitizerArgs {
2525
SanitizerSet Sanitizers;
2626
SanitizerSet RecoverableSanitizers;
2727
SanitizerSet TrapSanitizers;
28-
SanitizerSet MergeHandlers;
2928

3029
std::vector<std::string> UserIgnorelistFiles;
3130
std::vector<std::string> SystemIgnorelistFiles;

clang/lib/CodeGen/CGExpr.cpp

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4067,7 +4067,7 @@ static void emitCheckHandlerCall(CodeGenFunction &CGF,
40674067
ArrayRef<llvm::Value *> FnArgs,
40684068
SanitizerHandler CheckHandler,
40694069
CheckRecoverableKind RecoverKind, bool IsFatal,
4070-
llvm::BasicBlock *ContBB, bool NoMerge) {
4070+
llvm::BasicBlock *ContBB) {
40714071
assert(IsFatal || RecoverKind != CheckRecoverableKind::Unrecoverable);
40724072
std::optional<ApplyDebugLocation> DL;
40734073
if (!CGF.Builder.getCurrentDebugLocation()) {
@@ -4102,9 +4102,10 @@ static void emitCheckHandlerCall(CodeGenFunction &CGF,
41024102
llvm::AttributeList::FunctionIndex, B),
41034103
/*Local=*/true);
41044104
llvm::CallInst *HandlerCall = CGF.EmitNounwindRuntimeCall(Fn, FnArgs);
4105-
NoMerge = NoMerge || ClSanitizeDebugDeoptimization ||
4106-
!CGF.CGM.getCodeGenOpts().OptimizationLevel ||
4107-
(CGF.CurCodeDecl && CGF.CurCodeDecl->hasAttr<OptimizeNoneAttr>());
4105+
bool NoMerge =
4106+
ClSanitizeDebugDeoptimization ||
4107+
!CGF.CGM.getCodeGenOpts().OptimizationLevel ||
4108+
(CGF.CurCodeDecl && CGF.CurCodeDecl->hasAttr<OptimizeNoneAttr>());
41084109
if (NoMerge)
41094110
HandlerCall->addFnAttr(llvm::Attribute::NoMerge);
41104111
if (!MayReturn) {
@@ -4128,7 +4129,6 @@ void CodeGenFunction::EmitCheck(
41284129
llvm::Value *FatalCond = nullptr;
41294130
llvm::Value *RecoverableCond = nullptr;
41304131
llvm::Value *TrapCond = nullptr;
4131-
bool NoMerge = false;
41324132
for (int i = 0, n = Checked.size(); i < n; ++i) {
41334133
llvm::Value *Check = Checked[i].first;
41344134
// -fsanitize-trap= overrides -fsanitize-recover=.
@@ -4139,9 +4139,6 @@ void CodeGenFunction::EmitCheck(
41394139
? RecoverableCond
41404140
: FatalCond;
41414141
Cond = Cond ? Builder.CreateAnd(Cond, Check) : Check;
4142-
4143-
if (!CGM.getCodeGenOpts().SanitizeMergeHandlers.has(Checked[i].second))
4144-
NoMerge = true;
41454142
}
41464143

41474144
if (ClSanitizeGuardChecks) {
@@ -4156,7 +4153,7 @@ void CodeGenFunction::EmitCheck(
41564153
}
41574154

41584155
if (TrapCond)
4159-
EmitTrapCheck(TrapCond, CheckHandler, NoMerge);
4156+
EmitTrapCheck(TrapCond, CheckHandler);
41604157
if (!FatalCond && !RecoverableCond)
41614158
return;
41624159

@@ -4222,7 +4219,7 @@ void CodeGenFunction::EmitCheck(
42224219
// Simple case: we need to generate a single handler call, either
42234220
// fatal, or non-fatal.
42244221
emitCheckHandlerCall(*this, FnType, Args, CheckHandler, RecoverKind,
4225-
(FatalCond != nullptr), Cont, NoMerge);
4222+
(FatalCond != nullptr), Cont);
42264223
} else {
42274224
// Emit two handler calls: first one for set of unrecoverable checks,
42284225
// another one for recoverable.
@@ -4232,10 +4229,10 @@ void CodeGenFunction::EmitCheck(
42324229
Builder.CreateCondBr(FatalCond, NonFatalHandlerBB, FatalHandlerBB);
42334230
EmitBlock(FatalHandlerBB);
42344231
emitCheckHandlerCall(*this, FnType, Args, CheckHandler, RecoverKind, true,
4235-
NonFatalHandlerBB, NoMerge);
4232+
NonFatalHandlerBB);
42364233
EmitBlock(NonFatalHandlerBB);
42374234
emitCheckHandlerCall(*this, FnType, Args, CheckHandler, RecoverKind, false,
4238-
Cont, NoMerge);
4235+
Cont);
42394236
}
42404237

42414238
EmitBlock(Cont);
@@ -4426,7 +4423,6 @@ void CodeGenFunction::EmitUnreachable(SourceLocation Loc) {
44264423

44274424
void CodeGenFunction::EmitTrapCheck(llvm::Value *Checked,
44284425
SanitizerHandler CheckHandlerID,
4429-
bool NoMerge,
44304426
/*TO_UPSTREAM(BoundsSafety) ON*/
44314427
StringRef Annotation,
44324428
StringRef TrapMessage) {
@@ -4448,9 +4444,9 @@ void CodeGenFunction::EmitTrapCheck(llvm::Value *Checked,
44484444
}
44494445
/*TO_UPSTREAM(BoundsSafety) OFF*/
44504446

4451-
NoMerge = NoMerge || ClSanitizeDebugDeoptimization ||
4452-
!CGM.getCodeGenOpts().OptimizationLevel ||
4453-
(CurCodeDecl && CurCodeDecl->hasAttr<OptimizeNoneAttr>());
4447+
bool NoMerge = ClSanitizeDebugDeoptimization ||
4448+
!CGM.getCodeGenOpts().OptimizationLevel ||
4449+
(CurCodeDecl && CurCodeDecl->hasAttr<OptimizeNoneAttr>());
44544450

44554451
/*TO_UPSTREAM(BoundsSafety) ON*/
44564452
NoMerge |= CGM.getCodeGenOpts().TrapFuncReturns;
@@ -4540,7 +4536,7 @@ void CodeGenFunction::EmitBoundsSafetyTrapCheck(llvm::Value *Checked,
45404536
// We still need to pass `OptRemark` because not all emitted instructions
45414537
// can be covered by BoundsSafetyOptRemarkScope. This is because EmitTrapCheck
45424538
// caches basic blocks that contain instructions that need annotating.
4543-
EmitTrapCheck(Checked, SanitizerHandler::BoundsSafety, false,
4539+
EmitTrapCheck(Checked, SanitizerHandler::BoundsSafety,
45444540
GetBoundsSafetyOptRemarkString(OptRemark),
45454541
GetBoundsSafetyTrapMessageSuffix(kind, TrapCtx));
45464542
}

clang/lib/CodeGen/CodeGenFunction.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5316,7 +5316,6 @@ class CodeGenFunction : public CodeGenTypeCache {
53165316
/// Create a basic block that will call the trap intrinsic, and emit a
53175317
/// conditional branch to it, for the -ftrapv checks.
53185318
void EmitTrapCheck(llvm::Value *Checked, SanitizerHandler CheckHandlerID,
5319-
bool NoMerge = false,
53205319
StringRef Annotation = "", StringRef TrapMessage = "");
53215320

53225321
/* TO_UPSTREAM(BoundsSafety) ON*/

clang/lib/Driver/SanitizerArgs.cpp

Lines changed: 7 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,6 @@ static const SanitizerMask TrappingSupported =
6868
SanitizerKind::ImplicitConversion | SanitizerKind::Nullability |
6969
SanitizerKind::LocalBounds | SanitizerKind::CFI |
7070
SanitizerKind::FloatDivideByZero | SanitizerKind::ObjCCast;
71-
static const SanitizerMask MergeDefault = SanitizerKind::Undefined;
7271
static const SanitizerMask TrappingDefault = SanitizerKind::CFI;
7372
static const SanitizerMask CFIClasses =
7473
SanitizerKind::CFIVCall | SanitizerKind::CFINVCall |
@@ -700,13 +699,6 @@ SanitizerArgs::SanitizerArgs(const ToolChain &TC,
700699
TrappingKinds &= Kinds;
701700
RecoverableKinds &= ~TrappingKinds;
702701

703-
// Parse -f(no-)?sanitize-nonmerged-handlers flags
704-
SanitizerMask MergeKinds =
705-
parseSanitizeArgs(D, Args, DiagnoseErrors, MergeDefault, {}, {},
706-
options::OPT_fsanitize_merge_handlers_EQ,
707-
options::OPT_fno_sanitize_merge_handlers_EQ);
708-
MergeKinds &= Kinds;
709-
710702
// Setup ignorelist files.
711703
// Add default ignorelist from resource directory for activated sanitizers,
712704
// and validate special case lists format.
@@ -1125,8 +1117,6 @@ SanitizerArgs::SanitizerArgs(const ToolChain &TC,
11251117
TrapSanitizers.Mask |= TrappingKinds;
11261118
assert(!(RecoverableKinds & TrappingKinds) &&
11271119
"Overlap between recoverable and trapping sanitizers");
1128-
1129-
MergeHandlers.Mask |= MergeKinds;
11301120
}
11311121

11321122
static std::string toString(const clang::SanitizerSet &Sanitizers) {
@@ -1288,10 +1278,6 @@ void SanitizerArgs::addArgs(const ToolChain &TC, const llvm::opt::ArgList &Args,
12881278
CmdArgs.push_back(
12891279
Args.MakeArgString("-fsanitize-trap=" + toString(TrapSanitizers)));
12901280

1291-
if (!MergeHandlers.empty())
1292-
CmdArgs.push_back(
1293-
Args.MakeArgString("-fsanitize-merge=" + toString(MergeHandlers)));
1294-
12951281
addSpecialCaseListOpt(Args, CmdArgs,
12961282
"-fsanitize-ignorelist=", UserIgnorelistFiles);
12971283
addSpecialCaseListOpt(Args, CmdArgs,
@@ -1459,16 +1445,13 @@ void SanitizerArgs::addArgs(const ToolChain &TC, const llvm::opt::ArgList &Args,
14591445

14601446
SanitizerMask parseArgValues(const Driver &D, const llvm::opt::Arg *A,
14611447
bool DiagnoseErrors) {
1462-
assert(
1463-
(A->getOption().matches(options::OPT_fsanitize_EQ) ||
1464-
A->getOption().matches(options::OPT_fno_sanitize_EQ) ||
1465-
A->getOption().matches(options::OPT_fsanitize_recover_EQ) ||
1466-
A->getOption().matches(options::OPT_fno_sanitize_recover_EQ) ||
1467-
A->getOption().matches(options::OPT_fsanitize_trap_EQ) ||
1468-
A->getOption().matches(options::OPT_fno_sanitize_trap_EQ) ||
1469-
A->getOption().matches(options::OPT_fsanitize_merge_handlers_EQ) ||
1470-
A->getOption().matches(options::OPT_fno_sanitize_merge_handlers_EQ)) &&
1471-
"Invalid argument in parseArgValues!");
1448+
assert((A->getOption().matches(options::OPT_fsanitize_EQ) ||
1449+
A->getOption().matches(options::OPT_fno_sanitize_EQ) ||
1450+
A->getOption().matches(options::OPT_fsanitize_recover_EQ) ||
1451+
A->getOption().matches(options::OPT_fno_sanitize_recover_EQ) ||
1452+
A->getOption().matches(options::OPT_fsanitize_trap_EQ) ||
1453+
A->getOption().matches(options::OPT_fno_sanitize_trap_EQ)) &&
1454+
"Invalid argument in parseArgValues!");
14721455
SanitizerMask Kinds;
14731456
for (int i = 0, n = A->getNumValues(); i != n; ++i) {
14741457
const char *Value = A->getValue(i);

clang/lib/Frontend/CompilerInvocation.cpp

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1988,10 +1988,6 @@ void CompilerInvocationBase::GenerateCodeGenArgs(const CodeGenOptions &Opts,
19881988
for (StringRef Sanitizer : serializeSanitizerKinds(Opts.SanitizeTrap))
19891989
GenerateArg(Consumer, OPT_fsanitize_trap_EQ, Sanitizer);
19901990

1991-
for (StringRef Sanitizer :
1992-
serializeSanitizerKinds(Opts.SanitizeMergeHandlers))
1993-
GenerateArg(Consumer, OPT_fsanitize_merge_handlers_EQ, Sanitizer);
1994-
19951991
if (!Opts.EmitVersionIdentMetadata)
19961992
GenerateArg(Consumer, OPT_Qn);
19971993

@@ -2481,9 +2477,6 @@ bool CompilerInvocation::ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args,
24812477
parseSanitizerKinds("-fsanitize-trap=",
24822478
Args.getAllArgValues(OPT_fsanitize_trap_EQ), Diags,
24832479
Opts.SanitizeTrap);
2484-
parseSanitizerKinds("-fsanitize-merge=",
2485-
Args.getAllArgValues(OPT_fsanitize_merge_handlers_EQ),
2486-
Diags, Opts.SanitizeMergeHandlers);
24872480

24882481
Opts.EmitVersionIdentMetadata = Args.hasFlag(OPT_Qy, OPT_Qn, true);
24892482

clang/test/CodeGen/ubsan-trap-merge.c

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,11 @@
11
// NOTE: Assertions have mostly been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 5
22
// The most important assertion is the attributes at the end of the file, which
3-
// shows whether -ubsan-unique-traps and -fno-sanitize-merge attach 'nomerge'
4-
// to each ubsan call.
3+
// shows whether -ubsan-unique-traps attaches 'nomerge' to each ubsan call.
54
//
65
// RUN: %clang_cc1 -triple x86_64-linux-gnu -emit-llvm -fsanitize=signed-integer-overflow -O3 -mllvm -ubsan-unique-traps %s -o - -fsanitize-trap=signed-integer-overflow | FileCheck %s --check-prefix=TRAP
76
// RUN: %clang_cc1 -triple x86_64-linux-gnu -emit-llvm -fsanitize=signed-integer-overflow -O3 -mllvm -ubsan-unique-traps %s -o - | FileCheck %s --check-prefix=HANDLER
87
// RUN: %clang_cc1 -triple x86_64-linux-gnu -emit-llvm -fsanitize=signed-integer-overflow -O3 -mllvm -ubsan-unique-traps %s -o - -fsanitize-minimal-runtime | FileCheck %s --check-prefix=MINRT
98
//
10-
// RUN: %clang_cc1 -triple x86_64-linux-gnu -emit-llvm -fsanitize=signed-integer-overflow -O3 -fno-sanitize-merge=signed-integer-overflow %s -o - -fsanitize-trap=signed-integer-overflow | FileCheck %s --check-prefix=TRAP
11-
// RUN: %clang_cc1 -triple x86_64-linux-gnu -emit-llvm -fsanitize=signed-integer-overflow -O3 -fno-sanitize-merge=signed-integer-overflow %s -o - | FileCheck %s --check-prefix=HANDLER
12-
// RUN: %clang_cc1 -triple x86_64-linux-gnu -emit-llvm -fsanitize=signed-integer-overflow -O3 -fno-sanitize-merge=signed-integer-overflow %s -o - -fsanitize-minimal-runtime | FileCheck %s --check-prefix=MINRT
13-
//
149
// REQUIRES: x86-registered-target
1510

1611
// TRAP-LABEL: define dso_local range(i32 -2147483523, -2147483648) i32 @f(

0 commit comments

Comments
 (0)