Skip to content

Commit 9b8413a

Browse files
author
Abel Kocsis
committed
Revert "Revert "Revert "[clang] Report sanitizer blacklist as a dependency in cc1"""
This reverts commit 3182027.
1 parent 3182027 commit 9b8413a

File tree

6 files changed

+21
-62
lines changed

6 files changed

+21
-62
lines changed

clang/include/clang/Driver/Options.td

-3
Original file line numberDiff line numberDiff line change
@@ -979,9 +979,6 @@ def fno_sanitize_EQ : CommaJoined<["-"], "fno-sanitize=">, Group<f_clang_Group>,
979979
def fsanitize_blacklist : Joined<["-"], "fsanitize-blacklist=">,
980980
Group<f_clang_Group>,
981981
HelpText<"Path to blacklist file for sanitizers">;
982-
def fsanitize_system_blacklist : Joined<["-"], "fsanitize-system-blacklist=">,
983-
HelpText<"Path to system blacklist file for sanitizers">,
984-
Flags<[CC1Option]>;
985982
def fno_sanitize_blacklist : Flag<["-"], "fno-sanitize-blacklist">,
986983
Group<f_clang_Group>,
987984
HelpText<"Don't use blacklist file for sanitizers">;

clang/include/clang/Driver/SanitizerArgs.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ class SanitizerArgs {
2525
SanitizerSet RecoverableSanitizers;
2626
SanitizerSet TrapSanitizers;
2727

28-
std::vector<std::string> UserBlacklistFiles;
29-
std::vector<std::string> SystemBlacklistFiles;
28+
std::vector<std::string> BlacklistFiles;
29+
std::vector<std::string> ExtraDeps;
3030
int CoverageFeatures = 0;
3131
int MsanTrackOrigins = 0;
3232
bool MsanUseAfterDtor = true;

clang/lib/Driver/SanitizerArgs.cpp

+11-17
Original file line numberDiff line numberDiff line change
@@ -557,35 +557,29 @@ SanitizerArgs::SanitizerArgs(const ToolChain &TC,
557557

558558
// Setup blacklist files.
559559
// Add default blacklist from resource directory.
560-
addDefaultBlacklists(D, Kinds, SystemBlacklistFiles);
560+
addDefaultBlacklists(D, Kinds, BlacklistFiles);
561561
// Parse -f(no-)sanitize-blacklist options.
562562
for (const auto *Arg : Args) {
563563
if (Arg->getOption().matches(options::OPT_fsanitize_blacklist)) {
564564
Arg->claim();
565565
std::string BLPath = Arg->getValue();
566566
if (llvm::sys::fs::exists(BLPath)) {
567-
UserBlacklistFiles.push_back(BLPath);
567+
BlacklistFiles.push_back(BLPath);
568+
ExtraDeps.push_back(BLPath);
568569
} else {
569570
D.Diag(clang::diag::err_drv_no_such_file) << BLPath;
570571
}
571572
} else if (Arg->getOption().matches(options::OPT_fno_sanitize_blacklist)) {
572573
Arg->claim();
573-
UserBlacklistFiles.clear();
574-
SystemBlacklistFiles.clear();
574+
BlacklistFiles.clear();
575+
ExtraDeps.clear();
575576
}
576577
}
577578
// Validate blacklists format.
578579
{
579580
std::string BLError;
580581
std::unique_ptr<llvm::SpecialCaseList> SCL(
581-
llvm::SpecialCaseList::create(UserBlacklistFiles, BLError));
582-
if (!SCL.get())
583-
D.Diag(clang::diag::err_drv_malformed_sanitizer_blacklist) << BLError;
584-
}
585-
{
586-
std::string BLError;
587-
std::unique_ptr<llvm::SpecialCaseList> SCL(
588-
llvm::SpecialCaseList::create(SystemBlacklistFiles, BLError));
582+
llvm::SpecialCaseList::create(BlacklistFiles, BLError));
589583
if (!SCL.get())
590584
D.Diag(clang::diag::err_drv_malformed_sanitizer_blacklist) << BLError;
591585
}
@@ -958,15 +952,15 @@ void SanitizerArgs::addArgs(const ToolChain &TC, const llvm::opt::ArgList &Args,
958952
CmdArgs.push_back(
959953
Args.MakeArgString("-fsanitize-trap=" + toString(TrapSanitizers)));
960954

961-
for (const auto &BLPath : UserBlacklistFiles) {
955+
for (const auto &BLPath : BlacklistFiles) {
962956
SmallString<64> BlacklistOpt("-fsanitize-blacklist=");
963957
BlacklistOpt += BLPath;
964958
CmdArgs.push_back(Args.MakeArgString(BlacklistOpt));
965959
}
966-
for (const auto &BLPath : SystemBlacklistFiles) {
967-
SmallString<64> BlacklistOpt("-fsanitize-system-blacklist=");
968-
BlacklistOpt += BLPath;
969-
CmdArgs.push_back(Args.MakeArgString(BlacklistOpt));
960+
for (const auto &Dep : ExtraDeps) {
961+
SmallString<64> ExtraDepOpt("-fdepfile-entry=");
962+
ExtraDepOpt += Dep;
963+
CmdArgs.push_back(Args.MakeArgString(ExtraDepOpt));
970964
}
971965

972966
if (MsanTrackOrigins)

clang/lib/Frontend/CompilerInvocation.cpp

+1-20
Original file line numberDiff line numberDiff line change
@@ -1447,26 +1447,7 @@ static void ParseDependencyOutputArgs(DependencyOutputOptions &Opts,
14471447
// Add sanitizer blacklists as extra dependencies.
14481448
// They won't be discovered by the regular preprocessor, so
14491449
// we let make / ninja to know about this implicit dependency.
1450-
if (!Args.hasArg(OPT_fno_sanitize_blacklist)) {
1451-
for (const auto *A : Args.filtered(OPT_fsanitize_blacklist)) {
1452-
StringRef Val = A->getValue();
1453-
if (Val.find('=') == StringRef::npos)
1454-
Opts.ExtraDeps.push_back(Val);
1455-
}
1456-
if (Opts.IncludeSystemHeaders) {
1457-
for (const auto *A : Args.filtered(OPT_fsanitize_system_blacklist)) {
1458-
StringRef Val = A->getValue();
1459-
if (Val.find('=') == StringRef::npos)
1460-
Opts.ExtraDeps.push_back(Val);
1461-
}
1462-
}
1463-
}
1464-
1465-
// Propagate the extra dependencies.
1466-
for (const auto *A : Args.filtered(OPT_fdepfile_entry)) {
1467-
Opts.ExtraDeps.push_back(A->getValue());
1468-
}
1469-
1450+
Opts.ExtraDeps = Args.getAllArgValues(OPT_fdepfile_entry);
14701451
// Only the -fmodule-file=<file> form.
14711452
for (const auto *A : Args.filtered(OPT_fmodule_file)) {
14721453
StringRef Val = A->getValue();

clang/test/Driver/fsanitize-blacklist.c

+7-3
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,22 @@
1616
// RUN: %clang -target aarch64-linux-gnu -fsanitize=hwaddress -fsanitize-blacklist=%t.good -fsanitize-blacklist=%t.second %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-BLACKLIST
1717
// CHECK-BLACKLIST: -fsanitize-blacklist={{.*}}.good" "-fsanitize-blacklist={{.*}}.second
1818

19+
// Now, check for -fdepfile-entry flags.
20+
// RUN: %clang -target x86_64-linux-gnu -fsanitize=address -fsanitize-blacklist=%t.good -fsanitize-blacklist=%t.second %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-BLACKLIST2
21+
// CHECK-BLACKLIST2: -fdepfile-entry={{.*}}.good" "-fdepfile-entry={{.*}}.second
22+
1923
// Check that the default blacklist is not added as an extra dependency.
2024
// RUN: %clang -target x86_64-linux-gnu -fsanitize=address -resource-dir=%S/Inputs/resource_dir %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-DEFAULT-BLACKLIST-ASAN --implicit-check-not=fdepfile-entry --implicit-check-not=-fsanitize-blacklist=
21-
// CHECK-DEFAULT-BLACKLIST-ASAN: -fsanitize-system-blacklist={{.*[^w]}}asan_blacklist.txt
25+
// CHECK-DEFAULT-BLACKLIST-ASAN: -fsanitize-blacklist={{.*[^w]}}asan_blacklist.txt
2226
// RUN: %clang -target x86_64-linux-gnu -fsanitize=hwaddress -resource-dir=%S/Inputs/resource_dir %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-DEFAULT-BLACKLIST-HWASAN --implicit-check-not=fdepfile-entry --implicit-check-not=-fsanitize-blacklist=
23-
// CHECK-DEFAULT-BLACKLIST-HWASAN: -fsanitize-system-blacklist={{.*}}hwasan_blacklist.txt
27+
// CHECK-DEFAULT-BLACKLIST-HWASAN: -fsanitize-blacklist={{.*}}hwasan_blacklist.txt
2428

2529
// RUN: %clang -target x86_64-linux-gnu -fsanitize=integer -resource-dir=%S/Inputs/resource_dir %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-DEFAULT-UBSAN-BLACKLIST --implicit-check-not=fdepfile-entry --implicit-check-not=-fsanitize-blacklist=
2630
// RUN: %clang -target x86_64-linux-gnu -fsanitize=nullability -resource-dir=%S/Inputs/resource_dir %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-DEFAULT-UBSAN-BLACKLIST --implicit-check-not=fdepfile-entry --implicit-check-not=-fsanitize-blacklist=
2731
// RUN: %clang -target x86_64-linux-gnu -fsanitize=undefined -resource-dir=%S/Inputs/resource_dir %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-DEFAULT-UBSAN-BLACKLIST --implicit-check-not=fdepfile-entry --implicit-check-not=-fsanitize-blacklist=
2832
// RUN: %clang -target x86_64-linux-gnu -fsanitize=alignment -resource-dir=%S/Inputs/resource_dir %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-DEFAULT-UBSAN-BLACKLIST --implicit-check-not=fdepfile-entry --implicit-check-not=-fsanitize-blacklist=
2933
// RUN: %clang -target %itanium_abi_triple -fsanitize=float-divide-by-zero -resource-dir=%S/Inputs/resource_dir %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-DEFAULT-UBSAN-BLACKLIST --implicit-check-not=fdepfile-entry --implicit-check-not=-fsanitize-blacklist=
30-
// CHECK-DEFAULT-UBSAN-BLACKLIST: -fsanitize-system-blacklist={{.*}}ubsan_blacklist.txt
34+
// CHECK-DEFAULT-UBSAN-BLACKLIST: -fsanitize-blacklist={{.*}}ubsan_blacklist.txt
3135

3236
// Check that combining ubsan and another sanitizer results in both blacklists being used.
3337
// RUN: %clang -target x86_64-linux-gnu -fsanitize=undefined,address -resource-dir=%S/Inputs/resource_dir %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-DEFAULT-UBSAN-BLACKLIST --check-prefix=CHECK-DEFAULT-ASAN-BLACKLIST --implicit-check-not=fdepfile-entry --implicit-check-not=-fsanitize-blacklist=

clang/test/Frontend/dependency-gen.c

-17
Original file line numberDiff line numberDiff line change
@@ -27,20 +27,3 @@
2727
#ifndef INCLUDE_FLAG_TEST
2828
#include <x.h>
2929
#endif
30-
31-
// RUN: echo "fun:foo" > %t.blacklist1
32-
// RUN: echo "fun:foo" > %t.blacklist2
33-
// RUN: %clang -MD -MF - %s -fsyntax-only -resource-dir=%S/Inputs/resource_dir_with_cfi_blacklist -fsanitize=cfi-vcall -flto -fvisibility=hidden -fsanitize-blacklist=%t.blacklist1 -fsanitize-blacklist=%t.blacklist2 -I ./ | FileCheck -check-prefix=TWO-BLACK-LISTS %s
34-
// TWO-BLACK-LISTS: dependency-gen.o:
35-
// TWO-BLACK-LISTS-DAG: blacklist1
36-
// TWO-BLACK-LISTS-DAG: blacklist2
37-
// TWO-BLACK-LISTS-DAG: x.h
38-
// TWO-BLACK-LISTS-DAG: dependency-gen.c
39-
40-
// RUN: %clang -MD -MF - %s -fsyntax-only -resource-dir=%S/Inputs/resource_dir_with_cfi_blacklist -fsanitize=cfi-vcall -flto -fvisibility=hidden -I ./ | FileCheck -check-prefix=USER-AND-SYS-DEPS %s
41-
// USER-AND-SYS-DEPS: dependency-gen.o:
42-
// USER-AND-SYS-DEPS-DAG: cfi_blacklist.txt
43-
44-
// RUN: %clang -MMD -MF - %s -fsyntax-only -resource-dir=%S/Inputs/resource_dir_with_cfi_blacklist -fsanitize=cfi-vcall -flto -fvisibility=hidden -I ./ | FileCheck -check-prefix=ONLY-USER-DEPS %s
45-
// ONLY-USER-DEPS: dependency-gen.o:
46-
// NOT-ONLY-USER-DEPS: cfi_blacklist.txt

0 commit comments

Comments
 (0)