diff --git a/test/DebugInfo/move_function_dbginfo_async.swift b/test/DebugInfo/move_function_dbginfo_async.swift index 306b1cd4e7527..812b58a272a5a 100644 --- a/test/DebugInfo/move_function_dbginfo_async.swift +++ b/test/DebugInfo/move_function_dbginfo_async.swift @@ -2,7 +2,6 @@ // RUN: %target-swift-frontend -parse-as-library -disable-availability-checking -g -emit-sil -o - %s | %FileCheck -check-prefix=SIL %s // RUN: %target-swift-frontend -parse-as-library -disable-availability-checking -g -emit-ir -o - %s | %FileCheck %s // RUN: %target-swift-frontend -parse-as-library -disable-availability-checking -g -c %s -o %t/out.o -// RUN: %llvm-dwarfdump --show-children %t/out.o | %FileCheck -check-prefix=DWARF %s // This test checks that: // @@ -63,23 +62,27 @@ public func forceSplit5() async {} // CHECK: musttail call swifttailcc void // CHECK-NEXT: ret void -// DWARF: DW_AT_linkage_name ("$s3out13letSimpleTestyyxnYalF") -// DWARF: DW_TAG_formal_parameter -// DWARF-NEXT: DW_AT_location (DW_OP_entry_value([[ASYNC_REG:DW_OP_.*]]), DW_OP_plus_uconst 0x10, DW_OP_plus_uconst 0x8, DW_OP_deref) -// DWARF-NEXT: DW_AT_name ("msg") -// -// DWARF: DW_AT_linkage_name ("$s3out13letSimpleTestyyxnYalFTQ0_") -// DWARF: DW_AT_name ("letSimpleTest") -// DWARF: DW_TAG_formal_parameter -// DWARF-NEXT: DW_AT_location (DW_OP_entry_value([[ASYNC_REG]]), DW_OP_deref, DW_OP_plus_uconst 0x[[MSG_LOC:[a-f0-9]+]], DW_OP_plus_uconst 0x8, DW_OP_deref) -// DWARF-NEXT: DW_AT_name ("msg") -// -// DWARF: DW_AT_linkage_name ("$s3out13letSimpleTestyyxnYalFTY1_") -// DWARF: DW_AT_name ("letSimpleTest") -// DWARF: DW_TAG_formal_parameter -// DWARF: DW_AT_location (0x{{[a-f0-9]+}}: -// DWARF-NEXT: [0x{{[a-f0-9]+}}, 0x{{[a-f0-9]+}}): DW_OP_entry_value([[ASYNC_REG]]), DW_OP_plus_uconst 0x[[MSG_LOC]], DW_OP_plus_uconst 0x8, DW_OP_deref) -// DWARF-NEXT: DW_AT_name ("msg") +// RUN: %llvm-dwarfdump -c --name='$s3out13letSimpleTestyyxnYalF' %t/out.o | %FileCheck -check-prefix=DWARF1 %s +// DWARF1: DW_AT_linkage_name ("$s3out13letSimpleTestyyxnYalF") +// DWARF1: DW_TAG_formal_parameter +// DWARF1-NEXT: DW_AT_location (DW_OP_entry_value([[ASYNC_REG:DW_OP_.*]]), DW_OP_plus_uconst 0x10, DW_OP_plus_uconst 0x8, DW_OP_deref) +// DWARF1-NEXT: DW_AT_name ("msg") +// +// RUN: %llvm-dwarfdump -c --name='$s3out13letSimpleTestyyxnYalFTQ0_' %t/out.o | %FileCheck -check-prefix=DWARF2 %s +// DWARF2: DW_AT_linkage_name ("$s3out13letSimpleTestyyxnYalFTQ0_") +// DWARF2: DW_AT_name ("letSimpleTest") +// DWARF2: DW_TAG_formal_parameter +// DWARF2-NEXT: DW_AT_location (DW_OP_entry_value([[ASYNC_REG:DW_OP_.*]]), DW_OP_deref, DW_OP_plus_uconst 0x[[MSG_LOC:[a-f0-9]+]], DW_OP_plus_uconst 0x8, DW_OP_deref) +// DWARF2-NEXT: DW_AT_name ("msg") +// + +// RUN: %llvm-dwarfdump -c --name='$s3out13letSimpleTestyyxnYalFTY1_' %t/out.o | %FileCheck -check-prefix=DWARF3 %s +// DWARF3: DW_AT_linkage_name ("$s3out13letSimpleTestyyxnYalFTY1_") +// DWARF3: DW_AT_name ("letSimpleTest") +// DWARF3: DW_TAG_formal_parameter +// DWARF3: DW_AT_location (0x{{[a-f0-9]+}}: +// DWARF3-NEXT: [0x{{[a-f0-9]+}}, 0x{{[a-f0-9]+}}): DW_OP_entry_value([[ASYNC_REG:.*]]), DW_OP_plus_uconst 0x[[MSG_LOC:[a-f0-9]+]], DW_OP_plus_uconst 0x8, DW_OP_deref) +// DWARF3-NEXT: DW_AT_name ("msg") public func letSimpleTest(_ msg: __owned T) async { await forceSplit() use(consume msg) @@ -118,63 +121,70 @@ public func letSimpleTest(_ msg: __owned T) async { // CHECK-NEXT: ret void // CHECK-NEXT: } // -// DWARF: DW_AT_linkage_name ("$s3out13varSimpleTestyyxz_xtYalF") -// DWARF: DW_AT_name ("varSimpleTest") -// DWARF: DW_TAG_formal_parameter -// DWARF-NEXT: DW_AT_location (DW_OP_entry_value([[ASYNC_REG]]), DW_OP_plus_uconst 0x10, DW_OP_plus_uconst 0x8, DW_OP_deref) -// DWARF-NEXT: DW_AT_name ("msg") -// -// DWARF: DW_AT_linkage_name ("$s3out13varSimpleTestyyxz_xtYalFTQ0_") -// DWARF: DW_AT_name ("varSimpleTest") -// DWARF: DW_TAG_formal_parameter -// DWARF-NEXT: DW_AT_location (DW_OP_entry_value([[ASYNC_REG]]), DW_OP_deref, DW_OP_plus_uconst 0x[[MSG_LOC:[a-f0-9]+]], DW_OP_plus_uconst 0x8, DW_OP_deref) -// DWARF-NEXT: DW_AT_name ("msg") -// -// DWARF: DW_AT_linkage_name ("$s3out13varSimpleTestyyxz_xtYalFTY1_") -// DWARF: DW_AT_name ("varSimpleTest") -// DWARF: DW_TAG_formal_parameter -// DWARF-NEXT: DW_AT_location (0x{{[a-f0-9]+}}: -// DWARF-NEXT: [0x{{[a-f0-9]+}}, 0x{{[a-f0-9]+}}): DW_OP_entry_value([[ASYNC_REG]]), DW_OP_plus_uconst 0x[[MSG_LOC]], DW_OP_plus_uconst 0x8, DW_OP_deref) -// DWARF-NEXT: DW_AT_name ("msg") +// RUN: %llvm-dwarfdump -c --name='$s3out13varSimpleTestyyxz_xtYalF' %t/out.o | %FileCheck -check-prefix=DWARF4 %s +// DWARF4: DW_AT_linkage_name ("$s3out13varSimpleTestyyxz_xtYalF") +// DWARF4: DW_AT_name ("varSimpleTest") +// DWARF4: DW_TAG_formal_parameter +// DWARF4-NEXT: DW_AT_location (DW_OP_entry_value([[ASYNC_REG:.*]]), DW_OP_plus_uconst 0x10, DW_OP_plus_uconst 0x8, DW_OP_deref) +// DWARF4-NEXT: DW_AT_name ("msg") +// +// RUN: %llvm-dwarfdump -c --name='$s3out13varSimpleTestyyxz_xtYalFTQ0_' %t/out.o | %FileCheck -check-prefix=DWARF5 %s +// DWARF5: DW_AT_linkage_name ("$s3out13varSimpleTestyyxz_xtYalFTQ0_") +// DWARF5: DW_AT_name ("varSimpleTest") +// DWARF5: DW_TAG_formal_parameter +// DWARF5-NEXT: DW_AT_location (DW_OP_entry_value([[ASYNC_REG:.*]]), DW_OP_deref, DW_OP_plus_uconst 0x[[MSG_LOC:[a-f0-9]+]], DW_OP_plus_uconst 0x8, DW_OP_deref) +// DWARF5-NEXT: DW_AT_name ("msg") +// +// RUN: %llvm-dwarfdump -c --name='$s3out13varSimpleTestyyxz_xtYalFTY1_' %t/out.o | %FileCheck -check-prefix=DWARF6 %s +// DWARF6: DW_AT_linkage_name ("$s3out13varSimpleTestyyxz_xtYalFTY1_") +// DWARF6: DW_AT_name ("varSimpleTest") +// DWARF6: DW_TAG_formal_parameter +// DWARF6-NEXT: DW_AT_location (0x{{[a-f0-9]+}}: +// DWARF6-NEXT: [0x{{[a-f0-9]+}}, 0x{{[a-f0-9]+}}): DW_OP_entry_value([[ASYNC_REG:.*]]), DW_OP_plus_uconst 0x[[MSG_LOC:[a-f0-9]+]], DW_OP_plus_uconst 0x8, DW_OP_deref) +// DWARF6-NEXT: DW_AT_name ("msg") // // We were just moved and are not reinit yet. This is caused by us hopping twice // when we return from an async function. Once for the async function and then // for the hop to executor. // -// DWARF: DW_AT_linkage_name ("$s3out13varSimpleTestyyxz_xtYalFTQ2_") -// DWARF: DW_AT_name ("varSimpleTest") -// DWARF: DW_TAG_formal_parameter -// DWARF-NEXT: DW_AT_name ("msg") +// RUN: %llvm-dwarfdump -c --name='$s3out13varSimpleTestyyxz_xtYalFTQ2_' %t/out.o | %FileCheck -check-prefix=DWARF7 %s +// DWARF7: DW_AT_linkage_name ("$s3out13varSimpleTestyyxz_xtYalFTQ2_") +// DWARF7: DW_AT_name ("varSimpleTest") +// DWARF7: DW_TAG_formal_parameter +// DWARF7-NEXT: DW_AT_name ("msg") // // We reinitialize our value in this funclet and then consume it and then // reinitialize it again. So we have two different live ranges. Sadly, we don't // validate that the first live range doesn't start at the beginning of the // function. But we have lldb tests to validate that. // -// DWARF: DW_AT_linkage_name ("$s3out13varSimpleTestyyxz_xtYalFTY3_") -// DWARF: DW_AT_name ("varSimpleTest") -// DWARF: DW_TAG_formal_parameter -// DWARF: DW_AT_location (0x{{[a-f0-9]+}}: -// DWARF-NEXT: [0x{{[a-f0-9]+}}, 0x{{[a-f0-9]+}}): -// DWARF-SAME: DW_OP_entry_value([[ASYNC_REG]]), DW_OP_plus_uconst 0x[[MSG_LOC]], DW_OP_plus_uconst 0x8, DW_OP_deref -// DWARF-NEXT: [0x{{[a-f0-9]+}}, 0x{{[a-f0-9]+}}): -// DWARF-SAME: DW_OP_entry_value([[ASYNC_REG]]), DW_OP_plus_uconst 0x[[MSG_LOC]], DW_OP_plus_uconst 0x8, DW_OP_deref -// DWARF-NEXT: DW_AT_name ("msg") +// RUN: %llvm-dwarfdump -c --name='$s3out13varSimpleTestyyxz_xtYalFTY3_' %t/out.o | %FileCheck -check-prefix=DWARF8 %s +// DWARF8: DW_AT_linkage_name ("$s3out13varSimpleTestyyxz_xtYalFTY3_") +// DWARF8: DW_AT_name ("varSimpleTest") +// DWARF8: DW_TAG_formal_parameter +// DWARF8: DW_AT_location (0x{{[a-f0-9]+}}: +// DWARF8-NEXT: [0x{{[a-f0-9]+}}, 0x{{[a-f0-9]+}}): +// DWARF8-SAME: DW_OP_entry_value([[ASYNC_REG:.*]]), DW_OP_plus_uconst 0x[[MSG_LOC:[a-f0-9]+]], DW_OP_plus_uconst 0x8, DW_OP_deref +// DWARF8-NEXT: [0x{{[a-f0-9]+}}, 0x{{[a-f0-9]+}}): +// DWARF8-SAME: DW_OP_entry_value([[ASYNC_REG]]), DW_OP_plus_uconst 0x[[MSG_LOC]], DW_OP_plus_uconst 0x8, DW_OP_deref +// DWARF8-NEXT: DW_AT_name ("msg") // // We did not consume the value again here, so we just get a normal entry value for // the entire function. // -// DWARF: DW_AT_linkage_name ("$s3out13varSimpleTestyyxz_xtYalFTQ4_") -// DWARF: DW_AT_name ("varSimpleTest") -// DWARF: DW_TAG_formal_parameter -// DWARF-NEXT: DW_AT_location (DW_OP_entry_value([[ASYNC_REG]]), DW_OP_deref, DW_OP_plus_uconst 0x[[MSG_LOC]], DW_OP_plus_uconst 0x8, DW_OP_deref) -// DWARF-NEXT: DW_AT_name ("msg") -// -// DWARF: DW_AT_linkage_name ("$s3out13varSimpleTestyyxz_xtYalFTY5_") -// DWARF: DW_AT_name ("varSimpleTest") -// DWARF: DW_TAG_formal_parameter -// DWARF-NEXT: DW_AT_location (DW_OP_entry_value([[ASYNC_REG]]), DW_OP_plus_uconst 0x10, DW_OP_plus_uconst 0x8, DW_OP_deref -// DWARF-NEXT: DW_AT_name ("msg") +// RUN: %llvm-dwarfdump -c --name='$s3out13varSimpleTestyyxz_xtYalFTQ4_' %t/out.o | %FileCheck -check-prefix=DWARF9 %s +// DWARF9: DW_AT_linkage_name ("$s3out13varSimpleTestyyxz_xtYalFTQ4_") +// DWARF9: DW_AT_name ("varSimpleTest") +// DWARF9: DW_TAG_formal_parameter +// DWARF9-NEXT: DW_AT_location (DW_OP_entry_value([[ASYNC_REG:.*]]), DW_OP_deref, DW_OP_plus_uconst 0x[[MSG_LOC:[a-f0-9]+]], DW_OP_plus_uconst 0x8, DW_OP_deref) +// DWARF9-NEXT: DW_AT_name ("msg") +// +// RUN: %llvm-dwarfdump -c --name='$s3out13varSimpleTestyyxz_xtYalFTY5_' %t/out.o | %FileCheck -check-prefix=DWARF10 %s +// DWARF10: DW_AT_linkage_name ("$s3out13varSimpleTestyyxz_xtYalFTY5_") +// DWARF10: DW_AT_name ("varSimpleTest") +// DWARF10: DW_TAG_formal_parameter +// DWARF10-NEXT: DW_AT_location (DW_OP_entry_value([[ASYNC_REG:.*]]), DW_OP_plus_uconst 0x10, DW_OP_plus_uconst 0x8, DW_OP_deref +// DWARF10-NEXT: DW_AT_name ("msg") // Change name to varSimpleTestArg public func varSimpleTest(_ msg: inout T, _ msg2: T) async { @@ -219,60 +229,66 @@ public func varSimpleTest(_ msg: inout T, _ msg2: T) async { // We are not an argument, so no problem here. // -// DWARF: DW_AT_linkage_name ("$s3out16varSimpleTestVaryyYaF") +// RUN: %llvm-dwarfdump -c --name='$s3out16varSimpleTestVaryyYaF' %t/out.o | %FileCheck -check-prefix=DWARF11 %s +// DWARF11: DW_AT_linkage_name ("$s3out16varSimpleTestVaryyYaF") // -// DWARF: DW_AT_linkage_name ("$s3out16varSimpleTestVaryyYaFTY0_") +// RUN: %llvm-dwarfdump -c --name='$s3out16varSimpleTestVaryyYaFTY0_' %t/out.o | %FileCheck -check-prefix=DWARF12 %s +// DWARF12: DW_AT_linkage_name ("$s3out16varSimpleTestVaryyYaFTY0_") // -// DWARF: DW_TAG_variable -// DWARF-NEXT: DW_AT_location (DW_OP_entry_value([[ASYNC_REG]]), DW_OP_plus_uconst 0x10, DW_OP_plus_uconst 0x8) -// DWARF-NEXT: DW_AT_name ("k") +// DWARF12: DW_TAG_variable +// DWARF12-NEXT: DW_AT_location (DW_OP_entry_value([[ASYNC_REG:.*]]), DW_OP_plus_uconst 0x10, DW_OP_plus_uconst 0x8) +// DWARF12-NEXT: DW_AT_name ("k") // -// DWARF: DW_TAG_variable -// DWARF-NEXT: DW_AT_location -// DWARF-NEXT: DW_AT_name ("m") +// DWARF12: DW_TAG_variable +// DWARF12-NEXT: DW_AT_location +// DWARF12-NEXT: DW_AT_name ("m") // -// DWARF: DW_AT_linkage_name ("$s3out16varSimpleTestVaryyYaFTQ1_") +// RUN: %llvm-dwarfdump -c --name='$s3out16varSimpleTestVaryyYaFTQ1_' %t/out.o | %FileCheck -check-prefix=DWARF13 %s +// DWARF13: DW_AT_linkage_name ("$s3out16varSimpleTestVaryyYaFTQ1_") // -// DWARF: DW_TAG_variable -// DWARF-NEXT: DW_AT_location (DW_OP_entry_value([[ASYNC_REG]]), DW_OP_deref, DW_OP_plus_uconst 0x10, DW_OP_plus_uconst 0x8) -// DWARF-NEXT: DW_AT_name ("k") +// DWARF13: DW_TAG_variable +// DWARF13-NEXT: DW_AT_location (DW_OP_entry_value([[ASYNC_REG:.*]]), DW_OP_deref, DW_OP_plus_uconst 0x10, DW_OP_plus_uconst 0x8) +// DWARF13-NEXT: DW_AT_name ("k") // -// DWARF: DW_TAG_variable +// DWARF13: DW_TAG_variable // We don't pattern match the actual entry value of "m" since we don't guarantee // it is an entry value since it isn't moved. -// DWARF-NEXT: DW_AT_location -// DWARF-NEXT: DW_AT_name ("m") -// -// DWARF: DW_AT_linkage_name ("$s3out16varSimpleTestVaryyYaFTY2_") -// DWARF: DW_TAG_variable -// DWARF-NEXT: DW_AT_location (0x{{[0-9a-f]+}}: -// DWARF-NEXT: [0x{{[0-9a-f]+}}, 0x{{[0-9a-f]+}}): DW_OP_entry_value([[ASYNC_REG]]), DW_OP_plus_uconst 0x10, DW_OP_plus_uconst 0x8) -// DWARF-NEXT: DW_AT_name ("k") -// DWARF: DW_TAG_variable -// DWARF-NEXT: DW_AT_location -// DWARF-NEXT: DW_AT_name ("m") -// -// DWARF: DW_AT_linkage_name ("$s3out16varSimpleTestVaryyYaFTQ3_") -// DWARF: DW_TAG_variable +// DWARF13-NEXT: DW_AT_location +// DWARF13-NEXT: DW_AT_name ("m") +// +// RUN: %llvm-dwarfdump -c --name='$s3out16varSimpleTestVaryyYaFTY2_' %t/out.o | %FileCheck -check-prefix=DWARF14 %s +// DWARF14: DW_AT_linkage_name ("$s3out16varSimpleTestVaryyYaFTY2_") +// DWARF14: DW_TAG_variable +// DWARF14-NEXT: DW_AT_location (0x{{[0-9a-f]+}}: +// DWARF14-NEXT: [0x{{[0-9a-f]+}}, 0x{{[0-9a-f]+}}): DW_OP_entry_value([[ASYNC_REG:.*]]), DW_OP_plus_uconst 0x10, DW_OP_plus_uconst 0x8) +// DWARF14-NEXT: DW_AT_name ("k") +// DWARF14: DW_TAG_variable +// DWARF14-NEXT: DW_AT_location +// DWARF14-NEXT: DW_AT_name ("m") +// +// RUN: %llvm-dwarfdump -c --name='$s3out16varSimpleTestVaryyYaFTQ3_' %t/out.o | %FileCheck -check-prefix=DWARF15 %s +// DWARF15: DW_AT_linkage_name ("$s3out16varSimpleTestVaryyYaFTQ3_") +// DWARF15: DW_TAG_variable // We don't pattern match the actual entry value of "m" since we don't guarantee // it is an entry value since it isn't moved. -// DWARF-NEXT: DW_AT_location -// DWARF-NEXT: DW_AT_name ("m") +// DWARF15-NEXT: DW_AT_location +// DWARF15-NEXT: DW_AT_name ("m") // K is dead here. -// DWARF: DW_TAG_variable -// DWARF-NEXT: DW_AT_name ("k") +// DWARF15: DW_TAG_variable +// DWARF15-NEXT: DW_AT_name ("k") // // We reinitialize k in 4. -// DWARF: DW_AT_linkage_name ("$s3out16varSimpleTestVaryyYaFTY4_") -// DWARF: DW_TAG_variable +// RUN: %llvm-dwarfdump -c --name='$s3out16varSimpleTestVaryyYaFTY4_' %t/out.o | %FileCheck -check-prefix=DWARF16 %s +// DWARF16: DW_AT_linkage_name ("$s3out16varSimpleTestVaryyYaFTY4_") +// DWARF16: DW_TAG_variable // We don't pattern match the actual entry value of "m" since we don't guarantee // it is an entry value since it isn't moved. -// DWARF-NEXT: DW_AT_location -// DWARF-NEXT: DW_AT_name ("m") -// DWARF: DW_TAG_variable -// DWARF-NEXT: DW_AT_location (0x{{[0-9a-f]+}}: -// DWARF-NEXT: [0x{{[0-9a-f]+}}, 0x{{[0-9a-f]+}}): DW_OP_entry_value([[ASYNC_REG]]), DW_OP_plus_uconst 0x10, DW_OP_plus_uconst 0x8) -// DWARF-NEXT: DW_AT_name ("k") +// DWARF16-NEXT: DW_AT_location +// DWARF16-NEXT: DW_AT_name ("m") +// DWARF16: DW_TAG_variable +// DWARF16-NEXT: DW_AT_location (0x{{[0-9a-f]+}}: +// DWARF16-NEXT: [0x{{[0-9a-f]+}}, 0x{{[0-9a-f]+}}): DW_OP_entry_value([[ASYNC_REG:.*]]), DW_OP_plus_uconst 0x10, DW_OP_plus_uconst 0x8) +// DWARF16-NEXT: DW_AT_name ("k") public func varSimpleTestVar() async { var k = Klass() k.doSomething() @@ -342,44 +358,50 @@ public func varSimpleTestVar() async { // CHECK-LABEL: define internal swifttailcc void @"$s27move_function_dbginfo_async20letArgCCFlowTrueTestyyxnYalFTQ4_"( // CHECK: call void @llvm.dbg.value(metadata %swift.opaque* undef, metadata !{{.*}}, metadata !DIExpression(DW_OP_deref)), -// DWARF: DW_TAG_subprogram -// DWARF: DW_AT_linkage_name ("$s3out20letArgCCFlowTrueTestyyxnYalF") -// DWARF: DW_AT_name ("letArgCCFlowTrueTest") - -// DWARF: DW_TAG_formal_parameter -// DWARF-NEXT: DW_AT_location (DW_OP_entry_value([[ASYNC_REG]]), DW_OP_plus_uconst 0x10, DW_OP_plus_uconst 0x8, DW_OP_deref) -// DWARF-NEXT: DW_AT_name ("msg") -// -// DWARF: DW_AT_linkage_name ("$s3out20letArgCCFlowTrueTestyyxnYalFTQ0_") -// DWARF-NEXT: DW_AT_name ("letArgCCFlowTrueTest") -// DWARF: DW_TAG_formal_parameter -// DWARF-NEXT: DW_AT_location (DW_OP_entry_value([[ASYNC_REG]]), DW_OP_deref, DW_OP_plus_uconst 0x10, DW_OP_plus_uconst 0x8, DW_OP_deref) -// DWARF-NEXT: DW_AT_name ("msg") -// -// DWARF: DW_AT_linkage_name ("$s3out20letArgCCFlowTrueTestyyxnYalFTY1_") -// DWARF-NEXT: DW_AT_name ("letArgCCFlowTrueTest") -// DWARF: DW_TAG_formal_parameter -// DWARF-NEXT: DW_AT_location (0x{{[a-f0-9]+}}: -// DWARF-NEXT: [0x{{[a-f0-9]+}}, 0x{{[a-f0-9]+}}): DW_OP_entry_value([[ASYNC_REG]]), DW_OP_plus_uconst 0x10, DW_OP_plus_uconst 0x8, DW_OP_deref -// DWARF-NEXT: [0x{{[a-f0-9]+}}, 0x{{[a-f0-9]+}}): DW_OP_entry_value([[ASYNC_REG]]), DW_OP_plus_uconst 0x10, DW_OP_plus_uconst 0x8, DW_OP_deref) -// DWARF-NEXT: DW_AT_name ("msg") -// -// DWARF: DW_AT_linkage_name ("$s3out20letArgCCFlowTrueTestyyxnYalFTQ2_") -// DWARF-NEXT: DW_AT_name ("letArgCCFlowTrueTest") -// DWARF: DW_TAG_formal_parameter -// DWARF-NEXT: DW_AT_name ("msg") -// -// DWARF: DW_AT_linkage_name ("$s3out20letArgCCFlowTrueTestyyxnYalFTQ3_") -// DWARF-NEXT: DW_AT_name ("letArgCCFlowTrueTest") -// DWARF: DW_TAG_formal_parameter -// DWARF-NEXT: DW_AT_location (0x{{[a-f0-9]+}}: -// DWARF-NEXT: [0x{{[a-f0-9]+}}, 0x{{[a-f0-9]+}}): DW_OP_entry_value([[ASYNC_REG]]), DW_OP_deref, DW_OP_plus_uconst 0x10, DW_OP_plus_uconst 0x8, DW_OP_deref) -// DWARF-NEXT: DW_AT_name ("msg") -// -// DWARF: DW_AT_linkage_name ("$s3out20letArgCCFlowTrueTestyyxnYalFTQ4_") -// DWARF-NEXT: DW_AT_name ("letArgCCFlowTrueTest") -// DWARF: DW_TAG_formal_parameter -// DWARF-NEXT: DW_AT_name ("msg") +// RUN: %llvm-dwarfdump -c --name='$s3out20letArgCCFlowTrueTestyyxnYalF' %t/out.o | %FileCheck -check-prefix=DWARF17 %s +// DWARF17: DW_TAG_subprogram +// DWARF17: DW_AT_linkage_name ("$s3out20letArgCCFlowTrueTestyyxnYalF") +// DWARF17: DW_AT_name ("letArgCCFlowTrueTest") + +// DWARF17: DW_TAG_formal_parameter +// DWARF17-NEXT: DW_AT_location (DW_OP_entry_value([[ASYNC_REG:.*]]), DW_OP_plus_uconst 0x10, DW_OP_plus_uconst 0x8, DW_OP_deref) +// DWARF17-NEXT: DW_AT_name ("msg") +// +// RUN: %llvm-dwarfdump -c --name='$s3out20letArgCCFlowTrueTestyyxnYalFTQ0_' %t/out.o | %FileCheck -check-prefix=DWARF18 %s +// DWARF18: DW_AT_linkage_name ("$s3out20letArgCCFlowTrueTestyyxnYalFTQ0_") +// DWARF18-NEXT: DW_AT_name ("letArgCCFlowTrueTest") +// DWARF18: DW_TAG_formal_parameter +// DWARF18-NEXT: DW_AT_location (DW_OP_entry_value([[ASYNC_REG:.*]]), DW_OP_deref, DW_OP_plus_uconst 0x10, DW_OP_plus_uconst 0x8, DW_OP_deref) +// DWARF18-NEXT: DW_AT_name ("msg") +// +// RUN: %llvm-dwarfdump -c --name='$s3out20letArgCCFlowTrueTestyyxnYalFTY1_' %t/out.o | %FileCheck -check-prefix=DWARF19 %s +// DWARF19: DW_AT_linkage_name ("$s3out20letArgCCFlowTrueTestyyxnYalFTY1_") +// DWARF19-NEXT: DW_AT_name ("letArgCCFlowTrueTest") +// DWARF19: DW_TAG_formal_parameter +// DWARF19-NEXT: DW_AT_location (0x{{[a-f0-9]+}}: +// DWARF19-NEXT: [0x{{[a-f0-9]+}}, 0x{{[a-f0-9]+}}): DW_OP_entry_value([[ASYNC_REG:.*]]), DW_OP_plus_uconst 0x10, DW_OP_plus_uconst 0x8, DW_OP_deref +// DWARF19-NEXT: [0x{{[a-f0-9]+}}, 0x{{[a-f0-9]+}}): DW_OP_entry_value([[ASYNC_REG]]), DW_OP_plus_uconst 0x10, DW_OP_plus_uconst 0x8, DW_OP_deref) +// DWARF19-NEXT: DW_AT_name ("msg") +// +// RUN: %llvm-dwarfdump -c --name='$s3out20letArgCCFlowTrueTestyyxnYalFTQ2_' %t/out.o | %FileCheck -check-prefix=DWARF20 %s +// DWARF20: DW_AT_linkage_name ("$s3out20letArgCCFlowTrueTestyyxnYalFTQ2_") +// DWARF20-NEXT: DW_AT_name ("letArgCCFlowTrueTest") +// DWARF20: DW_TAG_formal_parameter +// DWARF20-NEXT: DW_AT_name ("msg") +// +// RUN: %llvm-dwarfdump -c --name='$s3out20letArgCCFlowTrueTestyyxnYalFTQ3_' %t/out.o | %FileCheck -check-prefix=DWARF21 %s +// DWARF21: DW_AT_linkage_name ("$s3out20letArgCCFlowTrueTestyyxnYalFTQ3_") +// DWARF21-NEXT: DW_AT_name ("letArgCCFlowTrueTest") +// DWARF21: DW_TAG_formal_parameter +// DWARF21-NEXT: DW_AT_location (0x{{[a-f0-9]+}}: +// DWARF21-NEXT: [0x{{[a-f0-9]+}}, 0x{{[a-f0-9]+}}): DW_OP_entry_value([[ASYNC_REG:.*]]), DW_OP_deref, DW_OP_plus_uconst 0x10, DW_OP_plus_uconst 0x8, DW_OP_deref) +// DWARF21-NEXT: DW_AT_name ("msg") +// +// RUN: %llvm-dwarfdump -c --name='$s3out20letArgCCFlowTrueTestyyxnYalFTQ4_' %t/out.o | %FileCheck -check-prefix=DWARF22 %s +// DWARF22: DW_AT_linkage_name ("$s3out20letArgCCFlowTrueTestyyxnYalFTQ4_") +// DWARF22-NEXT: DW_AT_name ("letArgCCFlowTrueTest") +// DWARF22: DW_TAG_formal_parameter +// DWARF22-NEXT: DW_AT_name ("msg") public func letArgCCFlowTrueTest(_ msg: __owned T) async { await forceSplit1() if trueValue { @@ -480,57 +502,66 @@ public func letArgCCFlowTrueTest(_ msg: __owned T) async { // CHECK-NEXT: ret void, // CHECK-NEXT: } -// DWARF: DW_AT_linkage_name ("$s3out20varArgCCFlowTrueTestyyxzYaAA1PRzlF") -// DWARF: DW_AT_name ("varArgCCFlowTrueTest") -// DWARF: DW_TAG_formal_parameter -// DWARF-NEXT: DW_AT_location (DW_OP_entry_value([[ASYNC_REG]]), DW_OP_plus_uconst 0x10, DW_OP_plus_uconst 0x30, DW_OP_deref) -// DWARF-NEXT: DW_AT_name ("msg") -// -// DWARF: DW_AT_linkage_name ("$s3out20varArgCCFlowTrueTestyyxzYaAA1PRzlFTQ0_") -// DWARF-NEXT: DW_AT_name ("varArgCCFlowTrueTest") -// DWARF: DW_TAG_formal_parameter -// DWARF-NEXT: DW_AT_location (DW_OP_entry_value([[ASYNC_REG]]), DW_OP_deref, DW_OP_plus_uconst 0x10, DW_OP_plus_uconst 0x30, DW_OP_deref) -// DWARF-NEXT: DW_AT_name ("msg") -// -// DWARF: DW_AT_linkage_name ("$s3out20varArgCCFlowTrueTestyyxzYaAA1PRzlFTY1_") +// RUN: %llvm-dwarfdump -c --name='$s3out20varArgCCFlowTrueTestyyxzYaAA1PRzlF' %t/out.o | %FileCheck -check-prefix=DWARF24 %s +// DWARF24: DW_AT_linkage_name ("$s3out20varArgCCFlowTrueTestyyxzYaAA1PRzlF") +// DWARF24: DW_AT_name ("varArgCCFlowTrueTest") +// DWARF24: DW_TAG_formal_parameter +// DWARF24-NEXT: DW_AT_location (DW_OP_entry_value([[ASYNC_REG:.*]]), DW_OP_plus_uconst 0x10, DW_OP_plus_uconst 0x30, DW_OP_deref) +// DWARF24-NEXT: DW_AT_name ("msg") +// + +// RUN: %llvm-dwarfdump -c --name='$s3out20varArgCCFlowTrueTestyyxzYaAA1PRzlFTQ0_' %t/out.o | %FileCheck -check-prefix=DWARF25 %s +// DWARF25: DW_AT_linkage_name ("$s3out20varArgCCFlowTrueTestyyxzYaAA1PRzlFTQ0_") +// DWARF25-NEXT: DW_AT_name ("varArgCCFlowTrueTest") +// DWARF25: DW_TAG_formal_parameter +// DWARF25-NEXT: DW_AT_location (DW_OP_entry_value([[ASYNC_REG:.*]]), DW_OP_deref, DW_OP_plus_uconst 0x10, DW_OP_plus_uconst 0x30, DW_OP_deref) +// DWARF25-NEXT: DW_AT_name ("msg") +// +// RUN: %llvm-dwarfdump -c --name='$s3out20varArgCCFlowTrueTestyyxzYaAA1PRzlFTY1_' %t/out.o | %FileCheck -check-prefix=DWARF26 %s +// DWARF26: DW_AT_linkage_name ("$s3out20varArgCCFlowTrueTestyyxzYaAA1PRzlFTY1_") +// DWARF26-NEXT: DW_AT_name ("varArgCCFlowTrueTest") +// DWARF26: DW_TAG_formal_parameter +// DWARF26-NEXT: DW_AT_location (0x{{[a-f0-9]+}}: +// DWARF26-NEXT: [0x{{[a-f0-9]+}}, 0x{{[a-f0-9]+}}): DW_OP_entry_value([[ASYNC_REG:.*]]), DW_OP_plus_uconst 0x10, DW_OP_plus_uconst 0x30, DW_OP_deref +// DWARF26-NEXT: [0x{{[a-f0-9]+}}, 0x{{[a-f0-9]+}}): DW_OP_entry_value([[ASYNC_REG]]), DW_OP_plus_uconst 0x10, DW_OP_plus_uconst 0x30, DW_OP_deref) +// DWARF26-NEXT: DW_AT_name ("msg") +// +// RUN: %llvm-dwarfdump -c --name='$s3out20varArgCCFlowTrueTestyyxzYaAA1PRzlFTQ2_' %t/out.o | %FileCheck -check-prefix=DWARF27 %s +// DWARF27: DW_AT_linkage_name ("$s3out20varArgCCFlowTrueTestyyxzYaAA1PRzlFTQ2_") // DWARF-NEXT: DW_AT_name ("varArgCCFlowTrueTest") // DWARF: DW_TAG_formal_parameter -// DWARF-NEXT: DW_AT_location (0x{{[a-f0-9]+}}: -// DWARF-NEXT: [0x{{[a-f0-9]+}}, 0x{{[a-f0-9]+}}): DW_OP_entry_value([[ASYNC_REG]]), DW_OP_plus_uconst 0x10, DW_OP_plus_uconst 0x30, DW_OP_deref -// DWARF-NEXT: [0x{{[a-f0-9]+}}, 0x{{[a-f0-9]+}}): DW_OP_entry_value([[ASYNC_REG]]), DW_OP_plus_uconst 0x10, DW_OP_plus_uconst 0x30, DW_OP_deref) // DWARF-NEXT: DW_AT_name ("msg") // -// DWARF: DW_AT_linkage_name ("$s3out20varArgCCFlowTrueTestyyxzYaAA1PRzlFTQ2_") -// DWARF-NEXT: DW_AT_name ("varArgCCFlowTrueTest") -// DWARF: DW_TAG_formal_parameter +// RUN: %llvm-dwarfdump -c --name='$s3out20varArgCCFlowTrueTestyyxzYaAA1PRzlFTY3_' %t/out.o | %FileCheck -check-prefix=DWARF28 %s +// DWARF28: DW_AT_linkage_name ("$s3out20varArgCCFlowTrueTestyyxzYaAA1PRzlFTY3_") +// DWARF28-NEXT: DW_AT_name ("varArgCCFlowTrueTest") +// DWARF28: DW_TAG_formal_parameter +// DWARF28-NEXT: DW_AT_location (0x{{[a-f0-9]+}}: +// DWARF28-NEXT: [0x{{[a-f0-9]+}}, 0x{{[a-f0-9]+}}): DW_OP_entry_value([[ASYNC_REG:.*]]), DW_OP_plus_uconst 0x10, DW_OP_plus_uconst 0x30, DW_OP_deref) +// DWARF28-NEXT: DW_AT_name ("msg") +// +// RUN: %llvm-dwarfdump -c --name='$s3out20varArgCCFlowTrueTestyyxzYaAA1PRzlFTQ4_' %t/out.o | %FileCheck -check-prefix=DWARF29 %s +// DWARF29: DW_AT_linkage_name ("$s3out20varArgCCFlowTrueTestyyxzYaAA1PRzlFTQ4_") +// DWARF29-NEXT: DW_AT_name ("varArgCCFlowTrueTest") +// DWARF29: DW_TAG_formal_parameter +// DWARF29-NEXT: DW_AT_location (0x{{[a-f0-9]+}}: +// DWARF29-NEXT: [0x{{[a-f0-9]+}}, 0x{{[a-f0-9]+}}): DW_OP_entry_value([[ASYNC_REG:.*]]), DW_OP_deref, DW_OP_plus_uconst 0x10, DW_OP_plus_uconst 0x30, DW_OP_deref) // DWARF-NEXT: DW_AT_name ("msg") // -// DWARF: DW_AT_linkage_name ("$s3out20varArgCCFlowTrueTestyyxzYaAA1PRzlFTY3_") -// DWARF-NEXT: DW_AT_name ("varArgCCFlowTrueTest") -// DWARF: DW_TAG_formal_parameter -// DWARF-NEXT: DW_AT_location (0x{{[a-f0-9]+}}: -// DWARF-NEXT: [0x{{[a-f0-9]+}}, 0x{{[a-f0-9]+}}): DW_OP_entry_value([[ASYNC_REG]]), DW_OP_plus_uconst 0x10, DW_OP_plus_uconst 0x30, DW_OP_deref) -// DWARF-NEXT: DW_AT_name ("msg") -// -// DWARF: DW_AT_linkage_name ("$s3out20varArgCCFlowTrueTestyyxzYaAA1PRzlFTQ4_") -// DWARF-NEXT: DW_AT_name ("varArgCCFlowTrueTest") -// DWARF: DW_TAG_formal_parameter -// DWARF-NEXT: DW_AT_location (0x{{[a-f0-9]+}}: -// DWARF-NEXT: [0x{{[a-f0-9]+}}, 0x{{[a-f0-9]+}}): DW_OP_entry_value([[ASYNC_REG]]), DW_OP_deref, DW_OP_plus_uconst 0x10, DW_OP_plus_uconst 0x30, DW_OP_deref) -// DWARF-NEXT: DW_AT_name ("msg") -// -// DWARF: DW_AT_linkage_name ("$s3out20varArgCCFlowTrueTestyyxzYaAA1PRzlFTY5_") -// DWARF-NEXT: DW_AT_name ("varArgCCFlowTrueTest") -// DWARF: DW_TAG_formal_parameter -// DWARF-NEXT: DW_AT_location (0x{{[a-f0-9]+}}: -// DWARF-NEXT: [0x{{[a-f0-9]+}}, 0x{{[a-f0-9]+}}): DW_OP_entry_value([[ASYNC_REG]]), DW_OP_plus_uconst 0x10, DW_OP_plus_uconst 0x30, DW_OP_deref) -// DWARF-NEXT: DW_AT_name ("msg") -// -// DWARF: DW_AT_linkage_name ("$s3out20varArgCCFlowTrueTestyyxzYaAA1PRzlFTQ6_") -// DWARF-NEXT: DW_AT_name ("varArgCCFlowTrueTest") -// DWARF: DW_TAG_formal_parameter -// DWARF-NEXT: DW_AT_location (DW_OP_entry_value([[ASYNC_REG]]), DW_OP_deref, DW_OP_plus_uconst 0x10, DW_OP_plus_uconst 0x30, DW_OP_deref) -// DWARF-NEXT: DW_AT_name ("msg") +// RUN: %llvm-dwarfdump -c --name='$s3out20varArgCCFlowTrueTestyyxzYaAA1PRzlFTY5_' %t/out.o | %FileCheck -check-prefix=DWARF30 %s +// DWARF30: DW_AT_linkage_name ("$s3out20varArgCCFlowTrueTestyyxzYaAA1PRzlFTY5_") +// DWARF30-NEXT: DW_AT_name ("varArgCCFlowTrueTest") +// DWARF30: DW_TAG_formal_parameter +// DWARF30-NEXT: DW_AT_location (0x{{[a-f0-9]+}}: +// DWARF30-NEXT: [0x{{[a-f0-9]+}}, 0x{{[a-f0-9]+}}): DW_OP_entry_value([[ASYNC_REG:.*]]), DW_OP_plus_uconst 0x10, DW_OP_plus_uconst 0x30, DW_OP_deref) +// DWARF30-NEXT: DW_AT_name ("msg") +// +// RUN: %llvm-dwarfdump -c --name='$s3out20varArgCCFlowTrueTestyyxzYaAA1PRzlFTQ6_' %t/out.o | %FileCheck -check-prefix=DWARF31 %s +// DWARF31: DW_AT_linkage_name ("$s3out20varArgCCFlowTrueTestyyxzYaAA1PRzlFTQ6_") +// DWARF31-NEXT: DW_AT_name ("varArgCCFlowTrueTest") +// DWARF31: DW_TAG_formal_parameter +// DWARF31-NEXT: DW_AT_location (DW_OP_entry_value([[ASYNC_REG:.*]]), DW_OP_deref, DW_OP_plus_uconst 0x10, DW_OP_plus_uconst 0x30, DW_OP_deref) +// DWARF31-NEXT: DW_AT_name ("msg") public func varArgCCFlowTrueTest(_ msg: inout T) async { await forceSplit1() if trueValue {