https://github.com/MaskRay created https://github.com/llvm/llvm-project/pull/75889
In LLVMContext::diagnose, set `HasErrors` for `DS_Error` so that all derived `DiagnosticHandler` have correct `HasErrors` information. An alternative is to set `HasErrors` in `DiagnosticHandler::handleDiagnostics`, but all derived `handleDiagnostics` would have to call the base function. >From 855adfece4c0c70b0198bbffa1831ccf7060e715 Mon Sep 17 00:00:00 2001 From: Fangrui Song <i...@maskray.me> Date: Mon, 18 Dec 2023 19:32:52 -0800 Subject: [PATCH] =?UTF-8?q?[=F0=9D=98=80=F0=9D=97=BD=F0=9D=97=BF]=20initia?= =?UTF-8?q?l=20version?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Created using spr 1.3.4 --- clang/lib/CodeGen/CodeGenAction.cpp | 2 -- llvm/lib/IR/LLVMContext.cpp | 11 +++++++---- llvm/tools/llc/llc.cpp | 17 +++-------------- 3 files changed, 10 insertions(+), 20 deletions(-) diff --git a/clang/lib/CodeGen/CodeGenAction.cpp b/clang/lib/CodeGen/CodeGenAction.cpp index 4121a3709bc3af..753a8fd74fa696 100644 --- a/clang/lib/CodeGen/CodeGenAction.cpp +++ b/clang/lib/CodeGen/CodeGenAction.cpp @@ -418,8 +418,6 @@ void BackendConsumer::anchor() { } } // namespace clang bool ClangDiagnosticHandler::handleDiagnostics(const DiagnosticInfo &DI) { - if (DI.getSeverity() == DS_Error) - HasErrors = true; BackendCon->DiagnosticHandlerImpl(DI); return true; } diff --git a/llvm/lib/IR/LLVMContext.cpp b/llvm/lib/IR/LLVMContext.cpp index 8ddf51537ec1af..57077e786efc26 100644 --- a/llvm/lib/IR/LLVMContext.cpp +++ b/llvm/lib/IR/LLVMContext.cpp @@ -256,10 +256,13 @@ void LLVMContext::diagnose(const DiagnosticInfo &DI) { RS->emit(*OptDiagBase); // If there is a report handler, use it. - if (pImpl->DiagHandler && - (!pImpl->RespectDiagnosticFilters || isDiagnosticEnabled(DI)) && - pImpl->DiagHandler->handleDiagnostics(DI)) - return; + if (pImpl->DiagHandler) { + if (DI.getSeverity() == DS_Error) + pImpl->DiagHandler->HasErrors = true; + if ((!pImpl->RespectDiagnosticFilters || isDiagnosticEnabled(DI)) && + pImpl->DiagHandler->handleDiagnostics(DI)) + return; + } if (!isDiagnosticEnabled(DI)) return; diff --git a/llvm/tools/llc/llc.cpp b/llvm/tools/llc/llc.cpp index 8d906cf372878f..4a1957588a2243 100644 --- a/llvm/tools/llc/llc.cpp +++ b/llvm/tools/llc/llc.cpp @@ -307,16 +307,12 @@ static std::unique_ptr<ToolOutputFile> GetOutputStream(const char *TargetName, } struct LLCDiagnosticHandler : public DiagnosticHandler { - bool *HasError; - LLCDiagnosticHandler(bool *HasErrorPtr) : HasError(HasErrorPtr) {} bool handleDiagnostics(const DiagnosticInfo &DI) override { + DiagnosticHandler::handleDiagnostics(DI); if (DI.getKind() == llvm::DK_SrcMgr) { const auto &DISM = cast<DiagnosticInfoSrcMgr>(DI); const SMDiagnostic &SMD = DISM.getSMDiag(); - if (SMD.getKind() == SourceMgr::DK_Error) - *HasError = true; - SMD.print(nullptr, errs()); // For testing purposes, we print the LocCookie here. @@ -326,9 +322,6 @@ struct LLCDiagnosticHandler : public DiagnosticHandler { return true; } - if (DI.getSeverity() == DS_Error) - *HasError = true; - if (auto *Remark = dyn_cast<DiagnosticInfoOptimizationBase>(&DI)) if (!Remark->isEnabled()) return true; @@ -413,9 +406,7 @@ int main(int argc, char **argv) { Context.setDiscardValueNames(DiscardValueNames); // Set a diagnostic handler that doesn't exit on the first error - bool HasError = false; - Context.setDiagnosticHandler( - std::make_unique<LLCDiagnosticHandler>(&HasError)); + Context.setDiagnosticHandler(std::make_unique<LLCDiagnosticHandler>()); Expected<std::unique_ptr<ToolOutputFile>> RemarksFileOrErr = setupLLVMOptimizationRemarks(Context, RemarksFilename, RemarksPasses, @@ -757,9 +748,7 @@ static int compileModule(char **argv, LLVMContext &Context) { PM.run(*M); - auto HasError = - ((const LLCDiagnosticHandler *)(Context.getDiagHandlerPtr()))->HasError; - if (*HasError) + if (Context.getDiagHandlerPtr()->HasErrors) return 1; // Compare the two outputs and make sure they're the same _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits