[flang-commits] [flang] [flang] Fix build after 9e306ad4 (PR #141134)
Jan Svoboda via flang-commits
flang-commits at lists.llvm.org
Thu May 22 13:47:06 PDT 2025
https://github.com/jansvoboda11 updated https://github.com/llvm/llvm-project/pull/141134
>From 34cf500219e35111f6c9877632b65ac8fb8c5932 Mon Sep 17 00:00:00 2001
From: Jan Svoboda <jan_svoboda at apple.com>
Date: Thu, 22 May 2025 13:32:24 -0700
Subject: [PATCH 1/3] [flang] Fix build after 9e306ad4
---
flang/include/flang/Frontend/CompilerInstance.h | 2 +-
flang/include/flang/Frontend/CompilerInvocation.h | 2 +-
flang/include/flang/Frontend/TextDiagnosticPrinter.h | 4 ++--
flang/lib/Frontend/CompilerInstance.cpp | 5 ++---
flang/lib/Frontend/TextDiagnosticPrinter.cpp | 2 +-
flang/tools/flang-driver/driver.cpp | 10 +++++-----
flang/tools/flang-driver/fc1_main.cpp | 5 ++---
flang/unittests/Frontend/CompilerInstanceTest.cpp | 5 +++--
8 files changed, 17 insertions(+), 18 deletions(-)
diff --git a/flang/include/flang/Frontend/CompilerInstance.h b/flang/include/flang/Frontend/CompilerInstance.h
index 4ad95c9df42d7..4234e13597cd7 100644
--- a/flang/include/flang/Frontend/CompilerInstance.h
+++ b/flang/include/flang/Frontend/CompilerInstance.h
@@ -347,7 +347,7 @@ class CompilerInstance {
///
/// \return The new object on success, or null on failure.
static clang::IntrusiveRefCntPtr<clang::DiagnosticsEngine>
- createDiagnostics(clang::DiagnosticOptions *opts,
+ createDiagnostics(clang::DiagnosticOptions &opts,
clang::DiagnosticConsumer *client = nullptr,
bool shouldOwnClient = true);
void createDiagnostics(clang::DiagnosticConsumer *client = nullptr,
diff --git a/flang/include/flang/Frontend/CompilerInvocation.h b/flang/include/flang/Frontend/CompilerInvocation.h
index d6ee1511cdb4b..06978029435b7 100644
--- a/flang/include/flang/Frontend/CompilerInvocation.h
+++ b/flang/include/flang/Frontend/CompilerInvocation.h
@@ -43,7 +43,7 @@ bool parseDiagnosticArgs(clang::DiagnosticOptions &opts,
class CompilerInvocationBase {
public:
/// Options controlling the diagnostic engine.
- llvm::IntrusiveRefCntPtr<clang::DiagnosticOptions> diagnosticOpts;
+ std::shared_ptr<clang::DiagnosticOptions> diagnosticOpts;
/// Options for the preprocessor.
std::shared_ptr<Fortran::frontend::PreprocessorOptions> preprocessorOpts;
diff --git a/flang/include/flang/Frontend/TextDiagnosticPrinter.h b/flang/include/flang/Frontend/TextDiagnosticPrinter.h
index 9c99a0c314351..4913713b6c365 100644
--- a/flang/include/flang/Frontend/TextDiagnosticPrinter.h
+++ b/flang/include/flang/Frontend/TextDiagnosticPrinter.h
@@ -37,13 +37,13 @@ class TextDiagnostic;
class TextDiagnosticPrinter : public clang::DiagnosticConsumer {
raw_ostream &os;
- llvm::IntrusiveRefCntPtr<clang::DiagnosticOptions> diagOpts;
+ clang::DiagnosticOptions &diagOpts;
/// A string to prefix to error messages.
std::string prefix;
public:
- TextDiagnosticPrinter(raw_ostream &os, clang::DiagnosticOptions *diags);
+ TextDiagnosticPrinter(raw_ostream &os, clang::DiagnosticOptions &diags);
~TextDiagnosticPrinter() override;
/// Set the diagnostic printer prefix string, which will be printed at the
diff --git a/flang/lib/Frontend/CompilerInstance.cpp b/flang/lib/Frontend/CompilerInstance.cpp
index cbd2c58eeeb47..2e0f91fb0521c 100644
--- a/flang/lib/Frontend/CompilerInstance.cpp
+++ b/flang/lib/Frontend/CompilerInstance.cpp
@@ -226,12 +226,11 @@ bool CompilerInstance::executeAction(FrontendAction &act) {
void CompilerInstance::createDiagnostics(clang::DiagnosticConsumer *client,
bool shouldOwnClient) {
- diagnostics =
- createDiagnostics(&getDiagnosticOpts(), client, shouldOwnClient);
+ diagnostics = createDiagnostics(getDiagnosticOpts(), client, shouldOwnClient);
}
clang::IntrusiveRefCntPtr<clang::DiagnosticsEngine>
-CompilerInstance::createDiagnostics(clang::DiagnosticOptions *opts,
+CompilerInstance::createDiagnostics(clang::DiagnosticOptions &opts,
clang::DiagnosticConsumer *client,
bool shouldOwnClient) {
clang::IntrusiveRefCntPtr<clang::DiagnosticIDs> diagID(
diff --git a/flang/lib/Frontend/TextDiagnosticPrinter.cpp b/flang/lib/Frontend/TextDiagnosticPrinter.cpp
index 65626827af3b3..043440328b1f6 100644
--- a/flang/lib/Frontend/TextDiagnosticPrinter.cpp
+++ b/flang/lib/Frontend/TextDiagnosticPrinter.cpp
@@ -27,7 +27,7 @@
using namespace Fortran::frontend;
TextDiagnosticPrinter::TextDiagnosticPrinter(raw_ostream &diagOs,
- clang::DiagnosticOptions *diags)
+ clang::DiagnosticOptions &diags)
: os(diagOs), diagOpts(diags) {}
TextDiagnosticPrinter::~TextDiagnosticPrinter() {}
diff --git a/flang/tools/flang-driver/driver.cpp b/flang/tools/flang-driver/driver.cpp
index ed52988feaa59..35cc2efc0ac01 100644
--- a/flang/tools/flang-driver/driver.cpp
+++ b/flang/tools/flang-driver/driver.cpp
@@ -43,9 +43,9 @@ std::string getExecutablePath(const char *argv0) {
// This lets us create the DiagnosticsEngine with a properly-filled-out
// DiagnosticOptions instance
-static clang::DiagnosticOptions *
+static std::unique_ptr<clang::DiagnosticOptions>
createAndPopulateDiagOpts(llvm::ArrayRef<const char *> argv) {
- auto *diagOpts = new clang::DiagnosticOptions;
+ auto diagOpts = std::make_unique<clang::DiagnosticOptions>();
// Ignore missingArgCount and the return value of ParseDiagnosticArgs.
// Any errors that would be diagnosed here will also be diagnosed later,
@@ -114,17 +114,17 @@ int main(int argc, const char **argv) {
// Not in the frontend mode - continue in the compiler driver mode.
// Create DiagnosticsEngine for the compiler driver
- llvm::IntrusiveRefCntPtr<clang::DiagnosticOptions> diagOpts =
+ std::unique_ptr<clang::DiagnosticOptions> diagOpts =
createAndPopulateDiagOpts(args);
llvm::IntrusiveRefCntPtr<clang::DiagnosticIDs> diagID(
new clang::DiagnosticIDs());
Fortran::frontend::TextDiagnosticPrinter *diagClient =
- new Fortran::frontend::TextDiagnosticPrinter(llvm::errs(), &*diagOpts);
+ new Fortran::frontend::TextDiagnosticPrinter(llvm::errs(), *diagOpts);
diagClient->setPrefix(
std::string(llvm::sys::path::stem(getExecutablePath(args[0]))));
- clang::DiagnosticsEngine diags(diagID, &*diagOpts, diagClient);
+ clang::DiagnosticsEngine diags(diagID, *diagOpts, diagClient);
// Prepare the driver
clang::driver::Driver theDriver(driverPath,
diff --git a/flang/tools/flang-driver/fc1_main.cpp b/flang/tools/flang-driver/fc1_main.cpp
index 49535275d084d..f2cd513d0028c 100644
--- a/flang/tools/flang-driver/fc1_main.cpp
+++ b/flang/tools/flang-driver/fc1_main.cpp
@@ -67,9 +67,8 @@ int fc1_main(llvm::ArrayRef<const char *> argv, const char *argv0) {
// for parsing the arguments
llvm::IntrusiveRefCntPtr<clang::DiagnosticIDs> diagID(
new clang::DiagnosticIDs());
- llvm::IntrusiveRefCntPtr<clang::DiagnosticOptions> diagOpts =
- new clang::DiagnosticOptions();
- clang::DiagnosticsEngine diags(diagID, &*diagOpts, diagsBuffer);
+ clang::DiagnosticOptions diagOpts;
+ clang::DiagnosticsEngine diags(diagID, diagOpts, diagsBuffer);
bool success = CompilerInvocation::createFromArgs(flang->getInvocation(),
argv, diags, argv0);
diff --git a/flang/unittests/Frontend/CompilerInstanceTest.cpp b/flang/unittests/Frontend/CompilerInstanceTest.cpp
index 3fe2f063e996a..bf62a64be229a 100644
--- a/flang/unittests/Frontend/CompilerInstanceTest.cpp
+++ b/flang/unittests/Frontend/CompilerInstanceTest.cpp
@@ -67,14 +67,15 @@ TEST(CompilerInstance, AllowDiagnosticLogWithUnownedDiagnosticConsumer) {
// 1. Set-up a basic DiagnosticConsumer
std::string diagnosticOutput;
llvm::raw_string_ostream diagnosticsOS(diagnosticOutput);
+ clang::DiagnosticOptions diagPrinterOpts;
auto diagPrinter = std::make_unique<Fortran::frontend::TextDiagnosticPrinter>(
- diagnosticsOS, new clang::DiagnosticOptions());
+ diagnosticsOS, *diagPrinterOpts;
// 2. Create a CompilerInstance (to manage a DiagnosticEngine)
CompilerInstance compInst;
// 3. Set-up DiagnosticOptions
- auto diagOpts = new clang::DiagnosticOptions();
+ clang::DiagnosticOptions diagOpts;
// Tell the diagnostics engine to emit the diagnostic log to STDERR. This
// ensures that a chained diagnostic consumer is created so that the test can
// exercise the unowned diagnostic consumer in a chained consumer.
>From 0944453f35eaf6c254002cb41eb4aee54946f423 Mon Sep 17 00:00:00 2001
From: Jan Svoboda <jan_svoboda at apple.com>
Date: Thu, 22 May 2025 13:42:17 -0700
Subject: [PATCH 2/3] Convert -> to .
---
flang/lib/Frontend/TextDiagnosticPrinter.cpp | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/flang/lib/Frontend/TextDiagnosticPrinter.cpp b/flang/lib/Frontend/TextDiagnosticPrinter.cpp
index 043440328b1f6..911b78a109e2e 100644
--- a/flang/lib/Frontend/TextDiagnosticPrinter.cpp
+++ b/flang/lib/Frontend/TextDiagnosticPrinter.cpp
@@ -81,7 +81,7 @@ void TextDiagnosticPrinter::printLocForRemarks(
llvm::sys::path::make_preferred(absPath);
// Used for changing only the bold attribute
- if (diagOpts->ShowColors)
+ if (diagOpts.ShowColors)
os.changeColor(llvm::raw_ostream::SAVEDCOLOR, true);
// Print path, file name, line and column
@@ -113,11 +113,11 @@ void TextDiagnosticPrinter::HandleDiagnostic(
printLocForRemarks(diagMessageStream, diagMsg);
Fortran::frontend::TextDiagnostic::printDiagnosticLevel(os, level,
- diagOpts->ShowColors);
+ diagOpts.ShowColors);
Fortran::frontend::TextDiagnostic::printDiagnosticMessage(
os,
/*IsSupplemental=*/level == clang::DiagnosticsEngine::Note, diagMsg,
- diagOpts->ShowColors);
+ diagOpts.ShowColors);
os.flush();
}
>From 889172eaf986b904e30b07e611cd18513993a692 Mon Sep 17 00:00:00 2001
From: Jan Svoboda <jan_svoboda at apple.com>
Date: Thu, 22 May 2025 13:46:53 -0700
Subject: [PATCH 3/3] Fix CodeGenActionTest.cpp
---
flang/unittests/Frontend/CodeGenActionTest.cpp | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/flang/unittests/Frontend/CodeGenActionTest.cpp b/flang/unittests/Frontend/CodeGenActionTest.cpp
index e9ff095973b97..6020abc463eda 100644
--- a/flang/unittests/Frontend/CodeGenActionTest.cpp
+++ b/flang/unittests/Frontend/CodeGenActionTest.cpp
@@ -86,8 +86,9 @@ class LLVMConversionFailureCodeGenAction : public CodeGenAction {
TEST(CodeGenAction, GracefullyHandleLLVMConversionFailure) {
std::string diagnosticOutput;
llvm::raw_string_ostream diagnosticsOS(diagnosticOutput);
+ clang::DiagnosticOptions diagOpts;
auto diagPrinter = std::make_unique<Fortran::frontend::TextDiagnosticPrinter>(
- diagnosticsOS, new clang::DiagnosticOptions());
+ diagnosticsOS, diagOpts);
CompilerInstance ci;
ci.createDiagnostics(diagPrinter.get(), /*ShouldOwnClient=*/false);
More information about the flang-commits
mailing list