aboutsummaryrefslogtreecommitdiff
path: root/flang/lib/Lower/Bridge.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'flang/lib/Lower/Bridge.cpp')
-rw-r--r--flang/lib/Lower/Bridge.cpp50
1 files changed, 29 insertions, 21 deletions
diff --git a/flang/lib/Lower/Bridge.cpp b/flang/lib/Lower/Bridge.cpp
index 1adfb96..75048c1 100644
--- a/flang/lib/Lower/Bridge.cpp
+++ b/flang/lib/Lower/Bridge.cpp
@@ -6707,27 +6707,30 @@ Fortran::lower::LoweringBridge::LoweringBridge(
loweringOptions{loweringOptions}, envDefaults{envDefaults},
languageFeatures{languageFeatures} {
// Register the diagnostic handler.
- context.getDiagEngine().registerHandler([](mlir::Diagnostic &diag) {
- llvm::raw_ostream &os = llvm::errs();
- switch (diag.getSeverity()) {
- case mlir::DiagnosticSeverity::Error:
- os << "error: ";
- break;
- case mlir::DiagnosticSeverity::Remark:
- os << "info: ";
- break;
- case mlir::DiagnosticSeverity::Warning:
- os << "warning: ";
- break;
- default:
- break;
- }
- if (!mlir::isa<mlir::UnknownLoc>(diag.getLocation()))
- os << diag.getLocation() << ": ";
- os << diag << '\n';
- os.flush();
- return mlir::success();
- });
+ if (loweringOptions.getRegisterMLIRDiagnosticsHandler()) {
+ diagHandlerID =
+ context.getDiagEngine().registerHandler([](mlir::Diagnostic &diag) {
+ llvm::raw_ostream &os = llvm::errs();
+ switch (diag.getSeverity()) {
+ case mlir::DiagnosticSeverity::Error:
+ os << "error: ";
+ break;
+ case mlir::DiagnosticSeverity::Remark:
+ os << "info: ";
+ break;
+ case mlir::DiagnosticSeverity::Warning:
+ os << "warning: ";
+ break;
+ default:
+ break;
+ }
+ if (!mlir::isa<mlir::UnknownLoc>(diag.getLocation()))
+ os << diag.getLocation() << ": ";
+ os << diag << '\n';
+ os.flush();
+ return mlir::success();
+ });
+ }
auto getPathLocation = [&semanticsContext, &context]() -> mlir::Location {
std::optional<std::string> path;
@@ -6769,6 +6772,11 @@ Fortran::lower::LoweringBridge::LoweringBridge(
fir::setCommandline(*module, *cgOpts.RecordCommandLine);
}
+Fortran::lower::LoweringBridge::~LoweringBridge() {
+ if (diagHandlerID)
+ context.getDiagEngine().eraseHandler(*diagHandlerID);
+}
+
void Fortran::lower::genCleanUpInRegionIfAny(
mlir::Location loc, fir::FirOpBuilder &builder, mlir::Region &region,
Fortran::lower::StatementContext &context) {