diff --git a/flang/include/flang/Lower/Bridge.h b/flang/include/flang/Lower/Bridge.h --- a/flang/include/flang/Lower/Bridge.h +++ b/flang/include/flang/Lower/Bridge.h @@ -49,14 +49,16 @@ /// Create a lowering bridge instance. static LoweringBridge create(mlir::MLIRContext &ctx, + Fortran::semantics::SemanticsContext &semanticsContext, const Fortran::common::IntrinsicTypeDefaultKinds &defaultKinds, const Fortran::evaluate::IntrinsicProcTable &intrinsics, const Fortran::evaluate::TargetCharacteristics &targetCharacteristics, const Fortran::parser::AllCookedSources &allCooked, llvm::StringRef triple, fir::KindMapping &kindMap, const Fortran::lower::LoweringOptions &loweringOptions) { - return LoweringBridge(ctx, defaultKinds, intrinsics, targetCharacteristics, - allCooked, triple, kindMap, loweringOptions); + return LoweringBridge(ctx, semanticsContext, defaultKinds, intrinsics, + targetCharacteristics, allCooked, triple, kindMap, + loweringOptions); } //===--------------------------------------------------------------------===// @@ -92,6 +94,10 @@ /// Create a folding context. Careful: this is very expensive. Fortran::evaluate::FoldingContext createFoldingContext() const; + Fortran::semantics::SemanticsContext &getSemanticsContext() const { + return semanticsContext; + } + bool validModule() { return getModule(); } //===--------------------------------------------------------------------===// @@ -109,6 +115,7 @@ private: explicit LoweringBridge( mlir::MLIRContext &ctx, + Fortran::semantics::SemanticsContext &semanticsContext, const Fortran::common::IntrinsicTypeDefaultKinds &defaultKinds, const Fortran::evaluate::IntrinsicProcTable &intrinsics, const Fortran::evaluate::TargetCharacteristics &targetCharacteristics, @@ -118,6 +125,7 @@ LoweringBridge() = delete; LoweringBridge(const LoweringBridge &) = delete; + Fortran::semantics::SemanticsContext &semanticsContext; const Fortran::common::IntrinsicTypeDefaultKinds &defaultKinds; const Fortran::evaluate::IntrinsicProcTable &intrinsics; const Fortran::evaluate::TargetCharacteristics &targetCharacteristics; diff --git a/flang/lib/Frontend/FrontendActions.cpp b/flang/lib/Frontend/FrontendActions.cpp --- a/flang/lib/Frontend/FrontendActions.cpp +++ b/flang/lib/Frontend/FrontendActions.cpp @@ -142,10 +142,11 @@ // Create a LoweringBridge const common::IntrinsicTypeDefaultKinds &defKinds = ci.getInvocation().getSemanticsContext().defaultKinds(); - fir::KindMapping kindMap(mlirCtx.get(), - llvm::ArrayRef{fir::fromDefaultKinds(defKinds)}); + fir::KindMapping kindMap(mlirCtx.get(), llvm::ArrayRef{ + fir::fromDefaultKinds(defKinds)}); lower::LoweringBridge lb = Fortran::lower::LoweringBridge::create( - *mlirCtx, defKinds, ci.getInvocation().getSemanticsContext().intrinsics(), + *mlirCtx, ci.getInvocation().getSemanticsContext(), defKinds, + ci.getInvocation().getSemanticsContext().intrinsics(), ci.getInvocation().getSemanticsContext().targetCharacteristics(), ci.getParsing().allCooked(), ci.getInvocation().getTargetOpts().triple, kindMap, ci.getInvocation().getLoweringOpts()); @@ -425,8 +426,8 @@ clang::DiagnosticsEngine::Error, "Symbol not found"); auto gdv = ci.getInvocation().getFrontendOpts().getDefVals; - auto charBlock{cs.GetCharBlockFromLineAndColumns( - gdv.line, gdv.startColumn, gdv.endColumn)}; + auto charBlock{cs.GetCharBlockFromLineAndColumns(gdv.line, gdv.startColumn, + gdv.endColumn)}; if (!charBlock) { ci.getDiagnostics().Report(diagID); return; diff --git a/flang/lib/Lower/Bridge.cpp b/flang/lib/Lower/Bridge.cpp --- a/flang/lib/Lower/Bridge.cpp +++ b/flang/lib/Lower/Bridge.cpp @@ -3248,15 +3248,17 @@ Fortran::lower::LoweringBridge::LoweringBridge( mlir::MLIRContext &context, + Fortran::semantics::SemanticsContext &semanticsContext, const Fortran::common::IntrinsicTypeDefaultKinds &defaultKinds, const Fortran::evaluate::IntrinsicProcTable &intrinsics, const Fortran::evaluate::TargetCharacteristics &targetCharacteristics, const Fortran::parser::AllCookedSources &cooked, llvm::StringRef triple, fir::KindMapping &kindMap, const Fortran::lower::LoweringOptions &loweringOptions) - : defaultKinds{defaultKinds}, intrinsics{intrinsics}, - targetCharacteristics{targetCharacteristics}, cooked{&cooked}, - context{context}, kindMap{kindMap}, loweringOptions{loweringOptions} { + : semanticsContext{semanticsContext}, defaultKinds{defaultKinds}, + intrinsics{intrinsics}, targetCharacteristics{targetCharacteristics}, + cooked{&cooked}, context{context}, kindMap{kindMap}, + loweringOptions{loweringOptions} { // Register the diagnostic handler. context.getDiagEngine().registerHandler([](mlir::Diagnostic &diag) { llvm::raw_ostream &os = llvm::errs(); diff --git a/flang/tools/bbc/bbc.cpp b/flang/tools/bbc/bbc.cpp --- a/flang/tools/bbc/bbc.cpp +++ b/flang/tools/bbc/bbc.cpp @@ -220,7 +220,7 @@ // Use default lowering options for bbc. Fortran::lower::LoweringOptions loweringOptions{}; auto burnside = Fortran::lower::LoweringBridge::create( - ctx, defKinds, semanticsContext.intrinsics(), + ctx, semanticsContext, defKinds, semanticsContext.intrinsics(), semanticsContext.targetCharacteristics(), parsing.allCooked(), "", kindMap, loweringOptions); burnside.lower(parseTree, semanticsContext);