aboutsummaryrefslogtreecommitdiff
path: root/clang/lib
diff options
context:
space:
mode:
authorworuyu <99597449+woruyu@users.noreply.github.com>2025-07-25 22:20:30 +0800
committerGitHub <noreply@github.com>2025-07-25 10:20:30 -0400
commit9d3dd8efe07180a6b261ae617ffc1ee5e26419c9 (patch)
treec392f3f8f1c182527a433bd4ff2027debf454f79 /clang/lib
parentc1545b68bcba16c3d21fd3d0ee3bc4c92aa8d98f (diff)
downloadllvm-9d3dd8efe07180a6b261ae617ffc1ee5e26419c9.zip
llvm-9d3dd8efe07180a6b261ae617ffc1ee5e26419c9.tar.gz
llvm-9d3dd8efe07180a6b261ae617ffc1ee5e26419c9.tar.bz2
fix: replace report_fatal_error with Diags and exit (#147959)
report_fatal_error is not a good way to report diagnostics to the users, so this switches to using actual diagnostic reporting mechanisms instead. Fixes #147187
Diffstat (limited to 'clang/lib')
-rw-r--r--clang/lib/AST/ASTContext.cpp12
-rw-r--r--clang/lib/Basic/NoSanitizeList.cpp13
-rw-r--r--clang/lib/Basic/ProfileList.cpp10
-rw-r--r--clang/lib/Basic/SanitizerSpecialCaseList.cpp11
-rw-r--r--clang/lib/Driver/SanitizerArgs.cpp4
-rw-r--r--clang/lib/Frontend/CompilerInstance.cpp1
6 files changed, 29 insertions, 22 deletions
diff --git a/clang/lib/AST/ASTContext.cpp b/clang/lib/AST/ASTContext.cpp
index 6b6275f..c451c87 100644
--- a/clang/lib/AST/ASTContext.cpp
+++ b/clang/lib/AST/ASTContext.cpp
@@ -50,6 +50,7 @@
#include "clang/Basic/AddressSpaces.h"
#include "clang/Basic/Builtins.h"
#include "clang/Basic/CommentOptions.h"
+#include "clang/Basic/DiagnosticFrontend.h"
#include "clang/Basic/ExceptionSpecificationType.h"
#include "clang/Basic/IdentifierTable.h"
#include "clang/Basic/LLVM.h"
@@ -944,7 +945,7 @@ ASTContext::ASTContext(LangOptions &LOpts, SourceManager &SM,
DependentBitIntTypes(this_()), SubstTemplateTemplateParmPacks(this_()),
DeducedTemplates(this_()), ArrayParameterTypes(this_()),
CanonTemplateTemplateParms(this_()), SourceMgr(SM), LangOpts(LOpts),
- NoSanitizeL(new NoSanitizeList(LangOpts.NoSanitizeFiles, SM)),
+ NoSanitizeL(new NoSanitizeList(SM)),
XRayFilter(new XRayFunctionFilter(LangOpts.XRayAlwaysInstrumentFiles,
LangOpts.XRayNeverInstrumentFiles,
LangOpts.XRayAttrListFiles, SM)),
@@ -1697,6 +1698,15 @@ ASTContext::getRelocationInfoForCXXRecord(const CXXRecordDecl *RD) const {
return std::nullopt;
}
+void ASTContext::initSanitizers(const LangOptions &LangOpts,
+ SourceManager &SM) {
+ std::pair<unsigned, std::string> Error;
+ if (!NoSanitizeL->init(LangOpts.NoSanitizeFiles, Error)) {
+ SM.getDiagnostics().Report(diag::err_sanitize_ignorelist_failure)
+ << Error.first << Error.second;
+ }
+}
+
void ASTContext::setRelocationInfoForCXXRecord(
const CXXRecordDecl *RD, CXXRecordDeclRelocationInfo Info) {
assert(RD);
diff --git a/clang/lib/Basic/NoSanitizeList.cpp b/clang/lib/Basic/NoSanitizeList.cpp
index 96f79fb..dc9ab83 100644
--- a/clang/lib/Basic/NoSanitizeList.cpp
+++ b/clang/lib/Basic/NoSanitizeList.cpp
@@ -19,11 +19,7 @@
using namespace clang;
-NoSanitizeList::NoSanitizeList(const std::vector<std::string> &NoSanitizePaths,
- SourceManager &SM)
- : SSCL(SanitizerSpecialCaseList::createOrDie(
- NoSanitizePaths, SM.getFileManager().getVirtualFileSystem())),
- SM(SM) {}
+NoSanitizeList::NoSanitizeList(SourceManager &SM) : SM(SM) {}
NoSanitizeList::~NoSanitizeList() = default;
@@ -42,6 +38,13 @@ bool NoSanitizeList::containsPrefix(SanitizerMask Mask, StringRef Prefix,
return San == llvm::SpecialCaseList::NotFound || NoSan > San;
}
+bool NoSanitizeList::init(const std::vector<std::string> &Paths,
+ std::pair<unsigned, std::string> &Error) {
+ SSCL = SanitizerSpecialCaseList::create(
+ Paths, SM.getFileManager().getVirtualFileSystem(), Error);
+ return SSCL != nullptr;
+}
+
bool NoSanitizeList::containsGlobal(SanitizerMask Mask, StringRef GlobalName,
StringRef Category) const {
return containsPrefix(Mask, "global", GlobalName, Category);
diff --git a/clang/lib/Basic/ProfileList.cpp b/clang/lib/Basic/ProfileList.cpp
index 8481def..2b9f88eb 100644
--- a/clang/lib/Basic/ProfileList.cpp
+++ b/clang/lib/Basic/ProfileList.cpp
@@ -26,7 +26,7 @@ class ProfileSpecialCaseList : public llvm::SpecialCaseList {
public:
static std::unique_ptr<ProfileSpecialCaseList>
create(const std::vector<std::string> &Paths, llvm::vfs::FileSystem &VFS,
- std::string &Error);
+ std::pair<unsigned, std::string> &Error);
static std::unique_ptr<ProfileSpecialCaseList>
createOrDie(const std::vector<std::string> &Paths,
@@ -44,7 +44,8 @@ public:
std::unique_ptr<ProfileSpecialCaseList>
ProfileSpecialCaseList::create(const std::vector<std::string> &Paths,
- llvm::vfs::FileSystem &VFS, std::string &Error) {
+ llvm::vfs::FileSystem &VFS,
+ std::pair<unsigned, std::string> &Error) {
auto PSCL = std::make_unique<ProfileSpecialCaseList>();
if (PSCL->createInternal(Paths, VFS, Error))
return PSCL;
@@ -54,10 +55,11 @@ ProfileSpecialCaseList::create(const std::vector<std::string> &Paths,
std::unique_ptr<ProfileSpecialCaseList>
ProfileSpecialCaseList::createOrDie(const std::vector<std::string> &Paths,
llvm::vfs::FileSystem &VFS) {
- std::string Error;
+ std::pair<unsigned, std::string> Error;
if (auto PSCL = create(Paths, VFS, Error))
return PSCL;
- llvm::report_fatal_error(llvm::Twine(Error));
+ // TODO: add init function and use diagnose instead fo report_fatal_error
+ llvm::report_fatal_error(llvm::Twine(Error.second));
}
} // namespace clang
diff --git a/clang/lib/Basic/SanitizerSpecialCaseList.cpp b/clang/lib/Basic/SanitizerSpecialCaseList.cpp
index f7bc1d5..c3729e9 100644
--- a/clang/lib/Basic/SanitizerSpecialCaseList.cpp
+++ b/clang/lib/Basic/SanitizerSpecialCaseList.cpp
@@ -18,7 +18,7 @@ using namespace clang;
std::unique_ptr<SanitizerSpecialCaseList>
SanitizerSpecialCaseList::create(const std::vector<std::string> &Paths,
llvm::vfs::FileSystem &VFS,
- std::string &Error) {
+ std::pair<unsigned, std::string> &Error) {
std::unique_ptr<clang::SanitizerSpecialCaseList> SSCL(
new SanitizerSpecialCaseList());
if (SSCL->createInternal(Paths, VFS, Error)) {
@@ -28,15 +28,6 @@ SanitizerSpecialCaseList::create(const std::vector<std::string> &Paths,
return nullptr;
}
-std::unique_ptr<SanitizerSpecialCaseList>
-SanitizerSpecialCaseList::createOrDie(const std::vector<std::string> &Paths,
- llvm::vfs::FileSystem &VFS) {
- std::string Error;
- if (auto SSCL = create(Paths, VFS, Error))
- return SSCL;
- llvm::report_fatal_error(StringRef(Error));
-}
-
void SanitizerSpecialCaseList::createSanitizerSections() {
for (auto &S : Sections) {
SanitizerMask Mask;
diff --git a/clang/lib/Driver/SanitizerArgs.cpp b/clang/lib/Driver/SanitizerArgs.cpp
index 21e4cff..aa767ae3 100644
--- a/clang/lib/Driver/SanitizerArgs.cpp
+++ b/clang/lib/Driver/SanitizerArgs.cpp
@@ -181,11 +181,11 @@ static void validateSpecialCaseListFormat(const Driver &D,
if (SCLFiles.empty())
return;
- std::string BLError;
+ std::pair<unsigned, std::string> BLError;
std::unique_ptr<llvm::SpecialCaseList> SCL(
llvm::SpecialCaseList::create(SCLFiles, D.getVFS(), BLError));
if (!SCL && DiagnoseErrors)
- D.Diag(MalformedSCLErrorDiagID) << BLError;
+ D.Diag(MalformedSCLErrorDiagID) << BLError.first << BLError.second;
}
static void addDefaultIgnorelists(const Driver &D, SanitizerMask Kinds,
diff --git a/clang/lib/Frontend/CompilerInstance.cpp b/clang/lib/Frontend/CompilerInstance.cpp
index c7b82db..bbb856b 100644
--- a/clang/lib/Frontend/CompilerInstance.cpp
+++ b/clang/lib/Frontend/CompilerInstance.cpp
@@ -554,6 +554,7 @@ void CompilerInstance::createASTContext() {
PP.getBuiltinInfo(), PP.TUKind);
Context->InitBuiltinTypes(getTarget(), getAuxTarget());
setASTContext(Context);
+ Context->initSanitizers(getLangOpts(), PP.getSourceManager());
}
// ExternalASTSource