Skip to content

Commit 430ebb5

Browse files
committed
fix: review
1 parent 6366e09 commit 430ebb5

File tree

8 files changed

+25
-28
lines changed

8 files changed

+25
-28
lines changed

clang/include/clang/AST/ASTContext.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -634,6 +634,8 @@ class ASTContext : public RefCountedBase<ASTContext> {
634634
void setRelocationInfoForCXXRecord(const CXXRecordDecl *,
635635
CXXRecordDeclRelocationInfo);
636636

637+
void initSanitizers(const LangOptions &LangOpts, SourceManager &SM);
638+
637639
/// Examines a given type, and returns whether the type itself
638640
/// is address discriminated, or any transitively embedded types
639641
/// contain data that is address discriminated. This includes

clang/include/clang/Basic/NoSanitizeList.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,9 @@ class NoSanitizeList {
3333
StringRef Category) const;
3434

3535
public:
36-
NoSanitizeList(const std::vector<std::string> &NoSanitizeListPaths,
37-
SourceManager &SM);
36+
NoSanitizeList(SourceManager &SM);
3837
~NoSanitizeList();
38+
bool init(const std::vector<std::string> &Paths, std::string &Error);
3939
bool containsGlobal(SanitizerMask Mask, StringRef GlobalName,
4040
StringRef Category = StringRef()) const;
4141
bool containsType(SanitizerMask Mask, StringRef MangledTypeName,

clang/include/clang/Basic/SanitizerSpecialCaseList.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,6 @@ class SanitizerSpecialCaseList : public llvm::SpecialCaseList {
3737
create(const std::vector<std::string> &Paths, llvm::vfs::FileSystem &VFS,
3838
std::string &Error);
3939

40-
static std::unique_ptr<SanitizerSpecialCaseList>
41-
createOrDie(const std::vector<std::string> &Paths, llvm::vfs::FileSystem &VFS,
42-
DiagnosticsEngine &Diags);
43-
4440
// Query ignorelisted entries if any bit in Mask matches the entry's section.
4541
bool inSection(SanitizerMask Mask, StringRef Prefix, StringRef Query,
4642
StringRef Category = StringRef()) const;

clang/lib/AST/ASTContext.cpp

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
#include "clang/Basic/AddressSpaces.h"
5151
#include "clang/Basic/Builtins.h"
5252
#include "clang/Basic/CommentOptions.h"
53+
#include "clang/Basic/DiagnosticFrontend.h"
5354
#include "clang/Basic/ExceptionSpecificationType.h"
5455
#include "clang/Basic/IdentifierTable.h"
5556
#include "clang/Basic/LLVM.h"
@@ -944,7 +945,7 @@ ASTContext::ASTContext(LangOptions &LOpts, SourceManager &SM,
944945
DependentBitIntTypes(this_()), SubstTemplateTemplateParmPacks(this_()),
945946
DeducedTemplates(this_()), ArrayParameterTypes(this_()),
946947
CanonTemplateTemplateParms(this_()), SourceMgr(SM), LangOpts(LOpts),
947-
NoSanitizeL(new NoSanitizeList(LangOpts.NoSanitizeFiles, SM)),
948+
NoSanitizeL(new NoSanitizeList(SM)),
948949
XRayFilter(new XRayFunctionFilter(LangOpts.XRayAlwaysInstrumentFiles,
949950
LangOpts.XRayNeverInstrumentFiles,
950951
LangOpts.XRayAttrListFiles, SM)),
@@ -1697,6 +1698,15 @@ ASTContext::getRelocationInfoForCXXRecord(const CXXRecordDecl *RD) const {
16971698
return std::nullopt;
16981699
}
16991700

1701+
void ASTContext::initSanitizers(const LangOptions &LangOpts,
1702+
SourceManager &SM) {
1703+
std::string Error;
1704+
if (!NoSanitizeL->init(LangOpts.NoSanitizeFiles, Error)) {
1705+
const std::string &Path = LangOpts.NoSanitizeFiles.front();
1706+
SM.getDiagnostics().Report(diag::err_fe_error_reading) << Path << Error;
1707+
}
1708+
}
1709+
17001710
void ASTContext::setRelocationInfoForCXXRecord(
17011711
const CXXRecordDecl *RD, CXXRecordDeclRelocationInfo Info) {
17021712
assert(RD);

clang/lib/Basic/NoSanitizeList.cpp

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,7 @@
1919

2020
using namespace clang;
2121

22-
NoSanitizeList::NoSanitizeList(const std::vector<std::string> &NoSanitizePaths,
23-
SourceManager &SM)
24-
: SSCL(SanitizerSpecialCaseList::createOrDie(
25-
NoSanitizePaths, SM.getFileManager().getVirtualFileSystem(),
26-
SM.getDiagnostics())),
27-
SM(SM) {}
22+
NoSanitizeList::NoSanitizeList(SourceManager &SM) : SM(SM) {}
2823

2924
NoSanitizeList::~NoSanitizeList() = default;
3025

@@ -43,6 +38,13 @@ bool NoSanitizeList::containsPrefix(SanitizerMask Mask, StringRef Prefix,
4338
return San == llvm::SpecialCaseList::NotFound || NoSan > San;
4439
}
4540

41+
bool NoSanitizeList::init(const std::vector<std::string> &Paths,
42+
std::string &Error) {
43+
SSCL = SanitizerSpecialCaseList::create(
44+
Paths, SM.getFileManager().getVirtualFileSystem(), Error);
45+
return SSCL != nullptr;
46+
}
47+
4648
bool NoSanitizeList::containsGlobal(SanitizerMask Mask, StringRef GlobalName,
4749
StringRef Category) const {
4850
return containsPrefix(Mask, "global", GlobalName, Category);

clang/lib/Basic/SanitizerSpecialCaseList.cpp

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -28,20 +28,6 @@ SanitizerSpecialCaseList::create(const std::vector<std::string> &Paths,
2828
return nullptr;
2929
}
3030

31-
std::unique_ptr<SanitizerSpecialCaseList>
32-
SanitizerSpecialCaseList::createOrDie(const std::vector<std::string> &Paths,
33-
llvm::vfs::FileSystem &VFS,
34-
DiagnosticsEngine &Diags) {
35-
std::string Error;
36-
if (auto SSCL = create(Paths, VFS, Error))
37-
return SSCL;
38-
unsigned DiagID = Diags.getCustomDiagID(clang::DiagnosticsEngine::Error,
39-
"failed to load NoSanitize file: %0");
40-
41-
Diags.Report(DiagID) << Error;
42-
exit(1);
43-
}
44-
4531
void SanitizerSpecialCaseList::createSanitizerSections() {
4632
for (auto &S : Sections) {
4733
SanitizerMask Mask;

clang/lib/Frontend/CompilerInstance.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -554,6 +554,7 @@ void CompilerInstance::createASTContext() {
554554
PP.getBuiltinInfo(), PP.TUKind);
555555
Context->InitBuiltinTypes(getTarget(), getAuxTarget());
556556
setASTContext(Context);
557+
Context->initSanitizers(getLangOpts(), PP.getSourceManager());
557558
}
558559

559560
// ExternalASTSource

clang/test/Driver/fsanitize-ignorelist.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@
7474

7575
// Check that a missing file passed to -fsanitize-system-ignorelist triggers a clean error without crashing.
7676
// RUN: not %clang --target=x86_64-linux-gnu -Xclang -fsanitize-system-ignorelist=%t.nonexistent %s -c -o /dev/null 2>&1 | FileCheck %s --check-prefix=CHECK-SYSTEM-IGNORELIST-NOFILE
77-
// CHECK-SYSTEM-IGNORELIST-NOFILE: error: failed to load NoSanitize file: can't open file {{.*[\\/]fsanitize-ignorelist\.c\.tmp\.nonexistent}}
77+
// CHECK-SYSTEM-IGNORELIST-NOFILE: error: error reading '{{.*[\\/]fsanitize-ignorelist\.c\.tmp\.nonexistent}}': can't open file '{{.*[\\/]fsanitize-ignorelist\.c\.tmp\.nonexistent}}': {{[Nn]o such file or directory}}
7878
// CHECK-SYSTEM-IGNORELIST-NOFILE-NOT: Stack dump:
7979
// CHECK-SYSTEM-IGNORELIST-NOFILE-NOT: PLEASE submit a bug report
8080
// CHECK-SYSTEM-IGNORELIST-NOFILE-NOT: diagnostic msg:

0 commit comments

Comments
 (0)