diff --git a/flang/lib/Optimizer/Passes/Pipelines.cpp b/flang/lib/Optimizer/Passes/Pipelines.cpp index 3c139f7e93405..a914407991591 100644 --- a/flang/lib/Optimizer/Passes/Pipelines.cpp +++ b/flang/lib/Optimizer/Passes/Pipelines.cpp @@ -264,10 +264,10 @@ void createDefaultFIRCodeGenPassPipeline(mlir::PassManager &pm, addNestedPassToAllTopLevelOperations(pm, fir::createAbstractResultOpt); fir::addCodeGenRewritePass( pm, (config.DebugInfo != llvm::codegenoptions::NoDebugInfo)); - fir::addTargetRewritePass(pm); - fir::addCompilerGeneratedNamesConversionPass(pm); fir::addExternalNameConversionPass(pm, config.Underscoring); fir::createDebugPasses(pm, config.DebugInfo, config.OptLevel, inputFilename); + fir::addTargetRewritePass(pm); + fir::addCompilerGeneratedNamesConversionPass(pm); if (config.VScaleMin != 0) pm.addPass(fir::createVScaleAttr({{config.VScaleMin, config.VScaleMax}})); diff --git a/flang/test/Driver/mlir-debug-pass-pipeline.f90 b/flang/test/Driver/mlir-debug-pass-pipeline.f90 index e44f4e62a7148..ab5ddedf5fc18 100644 --- a/flang/test/Driver/mlir-debug-pass-pipeline.f90 +++ b/flang/test/Driver/mlir-debug-pass-pipeline.f90 @@ -111,10 +111,10 @@ ! ALL-NEXT: CodeGenRewrite ! ALL-NEXT: (S) 0 num-dce'd - Number of operations eliminated -! ALL-NEXT: TargetRewrite -! ALL-NEXT: CompilerGeneratedNamesConversion ! ALL-NEXT: ExternalNameConversion ! DEBUG-NEXT: AddDebugInfo ! NO-DEBUG-NOT: AddDebugInfo +! ALL-NEXT: TargetRewrite +! ALL-NEXT: CompilerGeneratedNamesConversion ! ALL: FIRToLLVMLowering ! ALL-NOT: LLVMIRLoweringPass diff --git a/flang/test/Driver/mlir-pass-pipeline.f90 b/flang/test/Driver/mlir-pass-pipeline.f90 index 6c2829d3cc5c5..7d57135c5fee3 100644 --- a/flang/test/Driver/mlir-pass-pipeline.f90 +++ b/flang/test/Driver/mlir-pass-pipeline.f90 @@ -120,8 +120,8 @@ ! ALL-NEXT: CodeGenRewrite ! ALL-NEXT: (S) 0 num-dce'd - Number of operations eliminated +! ALL-NEXT: ExternalNameConversion ! ALL-NEXT: TargetRewrite ! ALL-NEXT: CompilerGeneratedNamesConversion -! ALL-NEXT: ExternalNameConversion ! ALL-NEXT: FIRToLLVMLowering ! ALL-NOT: LLVMIRLoweringPass diff --git a/flang/test/Integration/debug-complex-2.f90 b/flang/test/Integration/debug-complex-2.f90 new file mode 100644 index 0000000000000..c5f46d7b270b6 --- /dev/null +++ b/flang/test/Integration/debug-complex-2.f90 @@ -0,0 +1,12 @@ +! RUN: %flang_fc1 -emit-llvm -debug-info-kind=standalone %s -o - | FileCheck %s + +! Test that complex return type is correctly represented in debug. +complex function fn(a) + complex, intent(in) :: a + fn = a +end function + +! CHECK-DAG: ![[CMPLX:.*]] = !DIBasicType(name: "complex", size: 64, encoding: DW_ATE_complex_float) +! CHECK-DAG: ![[SR_TY:.*]] = !DISubroutineType(cc: DW_CC_normal, types: ![[TYPES:.*]]) +! CHECK-DAG: ![[TYPES]] = !{![[CMPLX]], ![[CMPLX]]} +! CHECK-DAG: !DISubprogram(name: "fn"{{.*}}type: ![[SR_TY]]{{.*}}) diff --git a/flang/test/Integration/debug-external-linkage-name.f90 b/flang/test/Integration/debug-external-linkage-name.f90 new file mode 100644 index 0000000000000..c7fdf846b7dd3 --- /dev/null +++ b/flang/test/Integration/debug-external-linkage-name.f90 @@ -0,0 +1,10 @@ +! RUN: %flang_fc1 -emit-llvm -debug-info-kind=standalone %s -o - | FileCheck %s + +! Test that correct linkage name is generated in the debug info. +subroutine sub(a) + integer :: a + return a+1 +end + +!CHECK: !DISubprogram(name: "sub", linkageName: "sub_"{{.*}}) +