llvm / llvm-project

The LLVM Project is a collection of modular and reusable compiler and toolchain technologies.
http://llvm.org
Other
28.78k stars 11.9k forks source link

Revert "[flang] Initial debug info support for local variables. (#909… #92302

Closed psteinfeld closed 5 months ago

psteinfeld commented 5 months ago

…05)"

This reverts commit 61da6366d043792d7db280ce9edd2db62516e0e8.

Update #90905 was causing many tests to fail.

See comments in #90905.

llvmbot commented 5 months ago

@llvm/pr-subscribers-flang-fir-hlfir

@llvm/pr-subscribers-flang-codegen

Author: Pete Steinfeld (psteinfeld)

Changes …05)" This reverts commit 61da6366d043792d7db280ce9edd2db62516e0e8. Update #90905 was causing many tests to fail. See comments in #90905. --- Patch is 31.53 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/92302.diff 14 Files Affected: - (modified) flang/include/flang/Optimizer/CodeGen/CGOps.td (-34) - (modified) flang/include/flang/Optimizer/CodeGen/CGPasses.td (-4) - (modified) flang/include/flang/Optimizer/CodeGen/CodeGen.h (+2-4) - (modified) flang/include/flang/Tools/CLOptions.inc (+4-7) - (modified) flang/lib/Optimizer/CodeGen/CGOps.cpp (+1-1) - (renamed) flang/lib/Optimizer/CodeGen/CGOps.h (-1) - (modified) flang/lib/Optimizer/CodeGen/CodeGen.cpp (+14-36) - (modified) flang/lib/Optimizer/CodeGen/PreCGRewrite.cpp (+8-41) - (modified) flang/lib/Optimizer/Transforms/AddDebugInfo.cpp (+4-52) - (modified) flang/lib/Optimizer/Transforms/DebugTypeGenerator.cpp (+5-5) - (modified) flang/test/Fir/declare-codegen.fir (+6-16) - (modified) flang/test/Fir/dummy-scope-codegen.fir (+3-8) - (removed) flang/test/Transforms/debug-local-var-2.f90 (-91) - (removed) flang/test/Transforms/debug-local-var.f90 (-54) ``````````diff diff --git a/flang/include/flang/Optimizer/CodeGen/CGOps.td b/flang/include/flang/Optimizer/CodeGen/CGOps.td index c375edee1fa77..35e70fa2ffa3f 100644 --- a/flang/include/flang/Optimizer/CodeGen/CGOps.td +++ b/flang/include/flang/Optimizer/CodeGen/CGOps.td @@ -16,8 +16,6 @@ include "mlir/IR/SymbolInterfaces.td" include "flang/Optimizer/Dialect/FIRTypes.td" -include "flang/Optimizer/Dialect/FIRAttr.td" -include "mlir/IR/BuiltinAttributes.td" def fircg_Dialect : Dialect { let name = "fircg"; @@ -204,36 +202,4 @@ def fircg_XArrayCoorOp : fircg_Op<"ext_array_coor", [AttrSizedOperandSegments]> }]; } -// Extended Declare operation. -def fircg_XDeclareOp : fircg_Op<"ext_declare", [AttrSizedOperandSegments]> { - let summary = "for internal conversion only"; - - let description = [{ - Prior to lowering to LLVM IR dialect, a DeclareOp will - be converted to an extended DeclareOp. - }]; - - let arguments = (ins - AnyRefOrBox:$memref, - Variadic:$shape, - Variadic:$shift, - Variadic:$typeparams, - Optional:$dummy_scope, - Builtin_StringAttr:$uniq_name - ); - let results = (outs AnyRefOrBox); - - let assemblyFormat = [{ - $memref (`(` $shape^ `)`)? (`origin` $shift^)? (`typeparams` $typeparams^)? - (`dummy_scope` $dummy_scope^)? - attr-dict `:` functional-type(operands, results) - }]; - - let extraClassDeclaration = [{ - // Shape is optional, but if it exists, it will be at offset 1. - unsigned shapeOffset() { return 1; } - unsigned shiftOffset() { return shapeOffset() + getShape().size(); } - }]; -} - #endif diff --git a/flang/include/flang/Optimizer/CodeGen/CGPasses.td b/flang/include/flang/Optimizer/CodeGen/CGPasses.td index 565920e55e6a8..f524fb4237344 100644 --- a/flang/include/flang/Optimizer/CodeGen/CGPasses.td +++ b/flang/include/flang/Optimizer/CodeGen/CGPasses.td @@ -47,10 +47,6 @@ def CodeGenRewrite : Pass<"cg-rewrite", "mlir::ModuleOp"> { let dependentDialects = [ "fir::FIROpsDialect", "fir::FIRCodeGenDialect" ]; - let options = [ - Option<"preserveDeclare", "preserve-declare", "bool", /*default=*/"false", - "Preserve DeclareOp during pre codegen re-write."> - ]; let statistics = [ Statistic<"numDCE", "num-dce'd", "Number of operations eliminated"> ]; diff --git a/flang/include/flang/Optimizer/CodeGen/CodeGen.h b/flang/include/flang/Optimizer/CodeGen/CodeGen.h index 4d2b191b46d08..26097dabf56c4 100644 --- a/flang/include/flang/Optimizer/CodeGen/CodeGen.h +++ b/flang/include/flang/Optimizer/CodeGen/CodeGen.h @@ -30,8 +30,7 @@ struct NameUniquer; /// Prerequiste pass for code gen. Perform intermediate rewrites to perform /// the code gen (to LLVM-IR dialect) conversion. -std::unique_ptr createFirCodeGenRewritePass( - CodeGenRewriteOptions Options = CodeGenRewriteOptions{}); +std::unique_ptr createFirCodeGenRewritePass(); /// FirTargetRewritePass options. struct TargetRewriteOptions { @@ -89,8 +88,7 @@ void populateFIRToLLVMConversionPatterns(fir::LLVMTypeConverter &converter, fir::FIRToLLVMPassOptions &options); /// Populate the pattern set with the PreCGRewrite patterns. -void populatePreCGRewritePatterns(mlir::RewritePatternSet &patterns, - bool preserveDeclare); +void populatePreCGRewritePatterns(mlir::RewritePatternSet &patterns); // declarative passes #define GEN_PASS_REGISTRATION diff --git a/flang/include/flang/Tools/CLOptions.inc b/flang/include/flang/Tools/CLOptions.inc index 761315e0abc81..cc3431d5b71d2 100644 --- a/flang/include/flang/Tools/CLOptions.inc +++ b/flang/include/flang/Tools/CLOptions.inc @@ -169,11 +169,9 @@ inline void addMemoryAllocationOpt(mlir::PassManager &pm) { } #if !defined(FLANG_EXCLUDE_CODEGEN) -inline void addCodeGenRewritePass(mlir::PassManager &pm, bool preserveDeclare) { - fir::CodeGenRewriteOptions options; - options.preserveDeclare = preserveDeclare; - addPassConditionally(pm, disableCodeGenRewrite, - [&]() { return fir::createFirCodeGenRewritePass(options); }); +inline void addCodeGenRewritePass(mlir::PassManager &pm) { + addPassConditionally( + pm, disableCodeGenRewrite, fir::createFirCodeGenRewritePass); } inline void addTargetRewritePass(mlir::PassManager &pm) { @@ -355,8 +353,7 @@ inline void createDefaultFIRCodeGenPassPipeline(mlir::PassManager &pm, MLIRToLLVMPassPipelineConfig config, llvm::StringRef inputFilename = {}) { fir::addBoxedProcedurePass(pm); addNestedPassToAllTopLevelOperations(pm, fir::createAbstractResultOpt); - fir::addCodeGenRewritePass( - pm, (config.DebugInfo != llvm::codegenoptions::NoDebugInfo)); + fir::addCodeGenRewritePass(pm); fir::addTargetRewritePass(pm); fir::addExternalNameConversionPass(pm, config.Underscoring); fir::createDebugPasses(pm, config.DebugInfo, config.OptLevel, inputFilename); diff --git a/flang/lib/Optimizer/CodeGen/CGOps.cpp b/flang/lib/Optimizer/CodeGen/CGOps.cpp index 6b8ba74525556..44d07d26dd2b6 100644 --- a/flang/lib/Optimizer/CodeGen/CGOps.cpp +++ b/flang/lib/Optimizer/CodeGen/CGOps.cpp @@ -10,7 +10,7 @@ // //===----------------------------------------------------------------------===// -#include "flang/Optimizer/CodeGen/CGOps.h" +#include "CGOps.h" #include "flang/Optimizer/Dialect/FIRDialect.h" #include "flang/Optimizer/Dialect/FIROps.h" #include "flang/Optimizer/Dialect/FIRType.h" diff --git a/flang/include/flang/Optimizer/CodeGen/CGOps.h b/flang/lib/Optimizer/CodeGen/CGOps.h similarity index 94% rename from flang/include/flang/Optimizer/CodeGen/CGOps.h rename to flang/lib/Optimizer/CodeGen/CGOps.h index df909d9ee81cb..b5a6d5bb9a9e6 100644 --- a/flang/include/flang/Optimizer/CodeGen/CGOps.h +++ b/flang/lib/Optimizer/CodeGen/CGOps.h @@ -13,7 +13,6 @@ #ifndef OPTIMIZER_CODEGEN_CGOPS_H #define OPTIMIZER_CODEGEN_CGOPS_H -#include "flang/Optimizer/Dialect/FIRAttr.h" #include "flang/Optimizer/Dialect/FIRType.h" #include "mlir/Dialect/Func/IR/FuncOps.h" diff --git a/flang/lib/Optimizer/CodeGen/CodeGen.cpp b/flang/lib/Optimizer/CodeGen/CodeGen.cpp index 72172f63888e1..21154902d23f8 100644 --- a/flang/lib/Optimizer/CodeGen/CodeGen.cpp +++ b/flang/lib/Optimizer/CodeGen/CodeGen.cpp @@ -12,7 +12,7 @@ #include "flang/Optimizer/CodeGen/CodeGen.h" -#include "flang/Optimizer/CodeGen/CGOps.h" +#include "CGOps.h" #include "flang/Optimizer/CodeGen/CodeGenOpenMP.h" #include "flang/Optimizer/CodeGen/FIROpPatterns.h" #include "flang/Optimizer/CodeGen/TypeConverter.h" @@ -170,28 +170,6 @@ genAllocationScaleSize(OP op, mlir::Type ity, return nullptr; } -namespace { -struct DeclareOpConversion : public fir::FIROpConversion { -public: - using FIROpConversion::FIROpConversion; - mlir::LogicalResult - matchAndRewrite(fir::cg::XDeclareOp declareOp, OpAdaptor adaptor, - mlir::ConversionPatternRewriter &rewriter) const override { - auto memRef = adaptor.getOperands()[0]; - if (auto fusedLoc = mlir::dyn_cast(declareOp.getLoc())) { - if (auto varAttr = - mlir::dyn_cast_or_null( - fusedLoc.getMetadata())) { - rewriter.create(memRef.getLoc(), memRef, - varAttr, nullptr); - } - } - rewriter.replaceOp(declareOp, memRef); - return mlir::success(); - } -}; -} // namespace - namespace { /// convert to LLVM IR dialect `alloca` struct AllocaOpConversion : public fir::FIROpConversion { @@ -3736,19 +3714,19 @@ void fir::populateFIRToLLVMConversionPatterns( BoxOffsetOpConversion, BoxProcHostOpConversion, BoxRankOpConversion, BoxTypeCodeOpConversion, BoxTypeDescOpConversion, CallOpConversion, CmpcOpConversion, ConstcOpConversion, ConvertOpConversion, - CoordinateOpConversion, DTEntryOpConversion, DeclareOpConversion, - DivcOpConversion, EmboxOpConversion, EmboxCharOpConversion, - EmboxProcOpConversion, ExtractValueOpConversion, FieldIndexOpConversion, - FirEndOpConversion, FreeMemOpConversion, GlobalLenOpConversion, - GlobalOpConversion, HasValueOpConversion, InsertOnRangeOpConversion, - InsertValueOpConversion, IsPresentOpConversion, LenParamIndexOpConversion, - LoadOpConversion, MulcOpConversion, NegcOpConversion, - NoReassocOpConversion, SelectCaseOpConversion, SelectOpConversion, - SelectRankOpConversion, SelectTypeOpConversion, ShapeOpConversion, - ShapeShiftOpConversion, ShiftOpConversion, SliceOpConversion, - StoreOpConversion, StringLitOpConversion, SubcOpConversion, - TypeDescOpConversion, TypeInfoOpConversion, UnboxCharOpConversion, - UnboxProcOpConversion, UndefOpConversion, UnreachableOpConversion, + CoordinateOpConversion, DTEntryOpConversion, DivcOpConversion, + EmboxOpConversion, EmboxCharOpConversion, EmboxProcOpConversion, + ExtractValueOpConversion, FieldIndexOpConversion, FirEndOpConversion, + FreeMemOpConversion, GlobalLenOpConversion, GlobalOpConversion, + HasValueOpConversion, InsertOnRangeOpConversion, InsertValueOpConversion, + IsPresentOpConversion, LenParamIndexOpConversion, LoadOpConversion, + MulcOpConversion, NegcOpConversion, NoReassocOpConversion, + SelectCaseOpConversion, SelectOpConversion, SelectRankOpConversion, + SelectTypeOpConversion, ShapeOpConversion, ShapeShiftOpConversion, + ShiftOpConversion, SliceOpConversion, StoreOpConversion, + StringLitOpConversion, SubcOpConversion, TypeDescOpConversion, + TypeInfoOpConversion, UnboxCharOpConversion, UnboxProcOpConversion, + UndefOpConversion, UnreachableOpConversion, UnrealizedConversionCastOpConversion, XArrayCoorOpConversion, XEmboxOpConversion, XReboxOpConversion, ZeroOpConversion>(converter, options); diff --git a/flang/lib/Optimizer/CodeGen/PreCGRewrite.cpp b/flang/lib/Optimizer/CodeGen/PreCGRewrite.cpp index c54a7457db761..5bd3ec8d18450 100644 --- a/flang/lib/Optimizer/CodeGen/PreCGRewrite.cpp +++ b/flang/lib/Optimizer/CodeGen/PreCGRewrite.cpp @@ -12,8 +12,8 @@ #include "flang/Optimizer/CodeGen/CodeGen.h" +#include "CGOps.h" #include "flang/Optimizer/Builder/Todo.h" // remove when TODO's are done -#include "flang/Optimizer/CodeGen/CGOps.h" #include "flang/Optimizer/Dialect/FIRDialect.h" #include "flang/Optimizer/Dialect/FIROps.h" #include "flang/Optimizer/Dialect/FIRType.h" @@ -270,43 +270,13 @@ class ArrayCoorConversion : public mlir::OpRewritePattern { }; class DeclareOpConversion : public mlir::OpRewritePattern { - bool preserveDeclare; - public: using OpRewritePattern::OpRewritePattern; - DeclareOpConversion(mlir::MLIRContext *ctx, bool preserveDecl) - : OpRewritePattern(ctx), preserveDeclare(preserveDecl) {} mlir::LogicalResult matchAndRewrite(fir::DeclareOp declareOp, mlir::PatternRewriter &rewriter) const override { - if (!preserveDeclare) { - rewriter.replaceOp(declareOp, declareOp.getMemref()); - return mlir::success(); - } - auto loc = declareOp.getLoc(); - llvm::SmallVector shapeOpers; - llvm::SmallVector shiftOpers; - if (auto shapeVal = declareOp.getShape()) { - if (auto shapeOp = mlir::dyn_cast(shapeVal.getDefiningOp())) - populateShape(shapeOpers, shapeOp); - else if (auto shiftOp = - mlir::dyn_cast(shapeVal.getDefiningOp())) - populateShapeAndShift(shapeOpers, shiftOpers, shiftOp); - else if (auto shiftOp = - mlir::dyn_cast(shapeVal.getDefiningOp())) - populateShift(shiftOpers, shiftOp); - else - return mlir::failure(); - } - // FIXME: Add FortranAttrs and CudaAttrs - auto xDeclOp = rewriter.create( - loc, declareOp.getType(), declareOp.getMemref(), shapeOpers, shiftOpers, - declareOp.getTypeparams(), declareOp.getDummyScope(), - declareOp.getUniqName()); - LLVM_DEBUG(llvm::dbgs() - << "rewriting " << declareOp << " to " << xDeclOp << '\n'); - rewriter.replaceOp(declareOp, xDeclOp.getOperation()->getResults()); + rewriter.replaceOp(declareOp, declareOp.getMemref()); return mlir::success(); } }; @@ -327,7 +297,6 @@ class DummyScopeOpConversion class CodeGenRewrite : public fir::impl::CodeGenRewriteBase { public: - CodeGenRewrite(fir::CodeGenRewriteOptions opts) : Base(opts) {} void runOnOperation() override final { mlir::ModuleOp mod = getOperation(); @@ -345,7 +314,7 @@ class CodeGenRewrite : public fir::impl::CodeGenRewriteBase { mlir::cast(embox.getType()).getEleTy())); }); mlir::RewritePatternSet patterns(&context); - fir::populatePreCGRewritePatterns(patterns, preserveDeclare); + fir::populatePreCGRewritePatterns(patterns); if (mlir::failed( mlir::applyPartialConversion(mod, target, std::move(patterns)))) { mlir::emitError(mlir::UnknownLoc::get(&context), @@ -361,14 +330,12 @@ class CodeGenRewrite : public fir::impl::CodeGenRewriteBase { } // namespace -std::unique_ptr -fir::createFirCodeGenRewritePass(fir::CodeGenRewriteOptions Options) { - return std::make_unique(Options); +std::unique_ptr fir::createFirCodeGenRewritePass() { + return std::make_unique(); } -void fir::populatePreCGRewritePatterns(mlir::RewritePatternSet &patterns, - bool preserveDeclare) { +void fir::populatePreCGRewritePatterns(mlir::RewritePatternSet &patterns) { patterns.insert(patterns.getContext()); - patterns.add(patterns.getContext(), preserveDeclare); + DeclareOpConversion, DummyScopeOpConversion>( + patterns.getContext()); } diff --git a/flang/lib/Optimizer/Transforms/AddDebugInfo.cpp b/flang/lib/Optimizer/Transforms/AddDebugInfo.cpp index cfad366cb5cb5..908c8fc96f633 100644 --- a/flang/lib/Optimizer/Transforms/AddDebugInfo.cpp +++ b/flang/lib/Optimizer/Transforms/AddDebugInfo.cpp @@ -15,7 +15,6 @@ #include "flang/Common/Version.h" #include "flang/Optimizer/Builder/FIRBuilder.h" #include "flang/Optimizer/Builder/Todo.h" -#include "flang/Optimizer/CodeGen/CGOps.h" #include "flang/Optimizer/Dialect/FIRDialect.h" #include "flang/Optimizer/Dialect/FIROps.h" #include "flang/Optimizer/Dialect/FIRType.h" @@ -46,59 +45,13 @@ namespace fir { namespace { class AddDebugInfoPass : public fir::impl::AddDebugInfoBase { - void handleDeclareOp(fir::cg::XDeclareOp declOp, - mlir::LLVM::DIFileAttr fileAttr, - mlir::LLVM::DIScopeAttr scopeAttr, - fir::DebugTypeGenerator &typeGen); - public: AddDebugInfoPass(fir::AddDebugInfoOptions options) : Base(options) {} void runOnOperation() override; }; -static uint32_t getLineFromLoc(mlir::Location loc) { - uint32_t line = 1; - if (auto fileLoc = mlir::dyn_cast(loc)) - line = fileLoc.getLine(); - return line; -} - } // namespace -void AddDebugInfoPass::handleDeclareOp(fir::cg::XDeclareOp declOp, - mlir::LLVM::DIFileAttr fileAttr, - mlir::LLVM::DIScopeAttr scopeAttr, - fir::DebugTypeGenerator &typeGen) { - mlir::MLIRContext *context = &getContext(); - mlir::OpBuilder builder(context); - auto result = fir::NameUniquer::deconstruct(declOp.getUniqName()); - - if (result.first != fir::NameUniquer::NameKind::VARIABLE) - return; - - // Only accept local variables. - if (result.second.procs.empty()) - return; - - // FIXME: There may be cases where an argument is processed a bit before - // DeclareOp is generated. In that case, DeclareOp may point to an - // intermediate op and not to BlockArgument. We need to find those cases and - // walk the chain to get to the actual argument. - - unsigned argNo = 0; - if (auto Arg = llvm::dyn_cast(declOp.getMemref())) - argNo = Arg.getArgNumber() + 1; - - auto tyAttr = typeGen.convertType(fir::unwrapRefType(declOp.getType()), - fileAttr, scopeAttr, declOp.getLoc()); - - auto localVarAttr = mlir::LLVM::DILocalVariableAttr::get( - context, scopeAttr, mlir::StringAttr::get(context, result.second.name), - fileAttr, getLineFromLoc(declOp.getLoc()), argNo, /* alignInBits*/ 0, - tyAttr); - declOp->setLoc(builder.getFusedLoc({declOp->getLoc()}, localVarAttr)); -} - void AddDebugInfoPass::runOnOperation() { mlir::ModuleOp module = getOperation(); mlir::MLIRContext *context = &getContext(); @@ -191,15 +144,14 @@ void AddDebugInfoPass::runOnOperation() { subprogramFlags = subprogramFlags | mlir::LLVM::DISubprogramFlags::Definition; } - unsigned line = getLineFromLoc(l); + unsigned line = 1; + if (auto funcLoc = mlir::dyn_cast(l)) + line = funcLoc.getLine(); + auto spAttr = mlir::LLVM::DISubprogramAttr::get( context, id, compilationUnit, fileAttr, funcName, fullName, funcFileAttr, line, line, subprogramFlags, subTypeAttr); funcOp->setLoc(builder.getFusedLoc({funcOp->getLoc()}, spAttr)); - - funcOp.walk([&](fir::cg::XDeclareOp declOp) { - handleDeclareOp(declOp, fileAttr, spAttr, typeGen); - }); }); } diff --git a/flang/lib/Optimizer/Transforms/DebugTypeGenerator.cpp b/flang/lib/Optimizer/Transforms/DebugTypeGenerator.cpp index 64c6547e06e0f..e5b4050dfb242 100644 --- a/flang/lib/Optimizer/Transforms/DebugTypeGenerator.cpp +++ b/flang/lib/Optimizer/Transforms/DebugTypeGenerator.cpp @@ -24,6 +24,11 @@ DebugTypeGenerator::DebugTypeGenerator(mlir::ModuleOp m) LLVM_DEBUG(llvm::dbgs() << "DITypeAttr generator\n"); } +static mlir::LLVM::DITypeAttr genPlaceholderType(mlir::MLIRContext *context) { + return mlir::LLVM::DIBasicTypeAttr::get( + context, llvm::dwarf::DW_TAG_base_type, "void", 32, 1); +} + static mlir::LLVM::DITypeAttr genBasicType(mlir::MLIRContext *context, mlir::StringAttr name, unsigned bitSize, @@ -32,11 +37,6 @@ static mlir::LLVM::DITypeAttr genBasicType(mlir::MLIRContext *context, context, llvm::dwarf::DW_TAG_base_type, name, bitSize, decoding); } -static mlir::LLVM::DITypeAttr genPlaceholderType(mlir::MLIRContext *context) { - return genBasicType(context, mlir::StringAttr::get(context, "integer"), 32, - llvm::dwarf::DW_ATE_signed); -} - mlir::LLVM::DITypeAttr DebugTypeGenerator::convertType(mlir::Type Ty, mlir::LLVM::DIFileAttr fileAttr, mlir::LLVM::DIScopeAttr scope, diff --git a/flang/test/Fir/declare-codegen.fir b/flang/test/Fir/declare-codegen.fir index c5879facb1572..9d68d3b2f9d4d 100644 --- a/flang/test/Fir/declare-codegen.fir +++ b/flang/test/Fir/declare-codegen.fir @@ -1,7 +1,5 @@ // Test rewrite of fir.declare. The result is replaced by the memref operand. -// RUN: fir-opt --cg-rewrite="preserve-declare=true" %s -o - | FileCheck %s --check-prefixes DECL -// RUN: fir-opt --cg-rewrite="preserve-declare=false" %s -o - | FileCheck %s --check-prefixes NODECL -// RUN: fir-opt --cg-rewrite %s -o - | FileCheck %s --check-prefixes NODECL +// RUN: fir-opt --cg-rewrite %s -o - | FileCheck %s func.func @test(%arg0: !fir.ref>) { @@ -17,14 +15,9 @@ func.func @test(%arg0: !fir.ref>) { func.func private @bar(%arg0: !fir.ref>) -// NODECL-LABEL: func.func @test( -// NODECL-SAME: %[[arg0:.*]]: !fir.ref>) { -// NODECL-NEXT: fir.call @bar(%[[arg0]]) : (!fir.ref>) -> () - -// DECL-LABEL: func.func @test( -// DECL-SAME: %[[arg0:.*]]: !fir.ref>) { -// DECL: fircg.ext_declare - +// CHECK-LABEL: func.func @te... [truncated] ``````````
abidh commented 5 months ago

Sorry @psteinfeld for the inconvenience. The problem was that variable were being generated even when user just asked for line-tables. I have fixed it now. I will re-land it after testing.