| // RUN: fir-opt --add-debug-info="emit-fake-use-for-debug-vars=true" %s | FileCheck %s --check-prefix=FAKE-USE | |
| // RUN: fir-opt --add-debug-info="emit-fake-use-for-debug-vars=false" %s | FileCheck %s --check-prefix=NO-FAKE-USE | |
| // FAKE-USE-LABEL: func.func @test_ | |
| // FAKE-USE: %[[UNDEF:.*]] = fir.undefined !fir.dscope | |
| // FAKE-USE: %[[DECL:.*]] = fircg.ext_declare %arg0 dummy_scope %[[UNDEF]] arg 1 | |
| // FAKE-USE: fir.call @foo() : () -> () | |
| // FAKE-USE: fir.fake_use %arg0 | |
| // FAKE-USE: return | |
| // NO-FAKE-USE-LABEL: func.func @test_ | |
| // NO-FAKE-USE: %[[UNDEF:.*]] = fir.undefined !fir.dscope | |
| // NO-FAKE-USE: %[[DECL:.*]] = fircg.ext_declare %arg0 dummy_scope %[[UNDEF]] arg 1 | |
| // NO-FAKE-USE: fir.call @foo() : () -> () | |
| // NO-FAKE-USE-NOT: fir.fake_use | |
| // NO-FAKE-USE: return | |
| // FAKE-USE-LABEL: func.func @test_local | |
| // FAKE-USE: %[[UNDEF:.*]] = fir.undefined !fir.dscope | |
| // FAKE-USE: %[[ALLOCA:.*]] = fir.alloca i32 | |
| // FAKE-USE: %[[DECL_LOCAL:.*]] = fircg.ext_declare %[[ALLOCA]] dummy_scope %[[UNDEF]] uniq_name("_QFtestElocal") | |
| // FAKE-USE: fir.call @foo() : () -> () | |
| // FAKE-USE-NOT: fir.fake_use | |
| // FAKE-USE: return | |
| // NO-FAKE-USE-LABEL: func.func @test_local | |
| // NO-FAKE-USE: %[[UNDEF:.*]] = fir.undefined !fir.dscope | |
| // NO-FAKE-USE: %[[ALLOCA:.*]] = fir.alloca i32 | |
| // NO-FAKE-USE: %[[DECL_LOCAL:.*]] = fircg.ext_declare %[[ALLOCA]] dummy_scope %[[UNDEF]] uniq_name("_QFtestElocal") | |
| // NO-FAKE-USE: fir.call @foo() : () -> () | |
| // NO-FAKE-USE-NOT: fir.fake_use | |
| // NO-FAKE-USE: return | |
| // FAKE-USE-LABEL: func.func @test_dynamic_array | |
| // FAKE-USE: fircg.ext_declare %arg0(%[[COUNT:.*]]) origin %[[LB:.*]] dummy_scope | |
| // FAKE-USE: fir.call @foo() : () -> () | |
| // FAKE-USE: fir.fake_use %[[COUNT]] | |
| // FAKE-USE: fir.fake_use %[[LB]] | |
| // FAKE-USE: return | |
| // NO-FAKE-USE-LABEL: func.func @test_dynamic_array | |
| // NO-FAKE-USE: fircg.ext_declare %arg0(%{{.*}}) origin %{{.*}} dummy_scope | |
| // NO-FAKE-USE: fir.call @foo() : () -> () | |
| // NO-FAKE-USE-NOT: fir.fake_use | |
| // NO-FAKE-USE: return | |
| // FAKE-USE-LABEL: func.func @test_char_array | |
| // FAKE-USE: fircg.ext_declare %arg0 typeparams %[[LEN:.*]] dummy_scope | |
| // FAKE-USE: fir.call @foo() : () -> () | |
| // FAKE-USE: fir.fake_use %[[LEN]] | |
| // FAKE-USE: return | |
| // NO-FAKE-USE-LABEL: func.func @test_char_array | |
| // NO-FAKE-USE: fircg.ext_declare %arg0 typeparams %{{.*}} dummy_scope | |
| // NO-FAKE-USE: fir.call @foo() : () -> () | |
| // NO-FAKE-USE-NOT: fir.fake_use | |
| // NO-FAKE-USE: return | |
| #loc1 = loc("debug-fake-use.f90":1:1) | |
| #loc3 = loc("debug-fake-use.f90":3:14) | |
| #loc4 = loc("debug-fake-use.f90":4:14) | |
| #loc5 = loc("debug-fake-use.f90":5:1) | |
| #loc = loc("debug-fake-use.f90":0:0) | |
| module { | |
| func.func private @foo() | |
| func.func @test_(%arg0: !fir.ref<i32> {fir.bindc_name = "expected"} loc("debug-fake-use.f90":1:1)) attributes {fir.internal_name = "_QPtest"} { | |
| %0 = fir.undefined !fir.dscope loc(#loc1) | |
| %1 = fircg.ext_declare %arg0 dummy_scope %0 arg 1 uniq_name("_QFtestEexpected") : (!fir.ref<i32>, !fir.dscope) -> !fir.ref<i32> loc(#loc3) | |
| fir.call @foo() : () -> () | |
| return loc(#loc5) | |
| } loc(#loc1) | |
| func.func @test_local() attributes {fir.internal_name = "_QPtest_local"} { | |
| %0 = fir.undefined !fir.dscope loc(#loc1) | |
| %1 = fir.alloca i32 loc(#loc4) | |
| %2 = fircg.ext_declare %1 dummy_scope %0 uniq_name("_QFtestElocal") : (!fir.ref<i32>, !fir.dscope) -> !fir.ref<i32> loc(#loc4) | |
| fir.call @foo() : () -> () | |
| return loc(#loc5) | |
| } loc(#loc1) | |
| func.func @test_dynamic_array(%arg0: !fir.ref<!fir.array<?xi32>> {fir.bindc_name = "arr"} loc("debug-fake-use.f90":1:1), %arg1: index loc("debug-fake-use.f90":1:1), %arg2: index loc("debug-fake-use.f90":1:1)) attributes {fir.internal_name = "_QPtest_dynamic_array"} { | |
| %0 = fir.undefined !fir.dscope loc(#loc1) | |
| %1 = fircg.ext_declare %arg0(%arg1) origin %arg2 dummy_scope %0 arg 1 uniq_name("_QFtest_dynamic_arrayEarr") : (!fir.ref<!fir.array<?xi32>>, index, index, !fir.dscope) -> !fir.ref<!fir.array<?xi32>> loc(#loc3) | |
| fir.call @foo() : () -> () | |
| return loc(#loc5) | |
| } loc(#loc1) | |
| func.func @test_char_array(%arg0: !fir.ref<!fir.char<1,?>> {fir.bindc_name = "str"} loc("debug-fake-use.f90":1:1), %arg1: index {fir.bindc_name = "n"} loc("debug-fake-use.f90":1:1)) attributes {fir.internal_name = "_QPtest_char_array"} { | |
| %0 = fir.undefined !fir.dscope loc(#loc1) | |
| %1 = fircg.ext_declare %arg0 typeparams %arg1 dummy_scope %0 arg 1 uniq_name("_QFtest_char_arrayEstr") : (!fir.ref<!fir.char<1,?>>, index, !fir.dscope) -> !fir.ref<!fir.char<1,?>> loc(#loc3) | |
| fir.call @foo() : () -> () | |
| return loc(#loc5) | |
| } loc(#loc1) | |
| } loc(#loc) |