@@ -39,13 +39,13 @@ public protocol P {
3939// CHECK: call void @llvm.dbg.declare(metadata {{.*}}** %m.debug, metadata ![[M_COPYABLE_VALUE_TEST:[0-9]*]],
4040//
4141// We should have a llvm.dbg.addr for k since we moved it.
42- // CHECK: call void @llvm.dbg.addr(metadata {{.*}}** %k.debug, metadata ![[K_COPYABLE_VALUE_TEST :[0-9]*]],
42+ // CHECK: call void @llvm.dbg.addr(metadata {{.*}}** %k.debug, metadata ![[K_COPYABLE_VALUE_METADATA :[0-9]*]], metadata !DIExpression()), !dbg ![[ADDR_LOC:[0-9]*]]
4343//
4444// Our undef should be an llvm.dbg.value. Counter-intuitively this works for
4545// both llvm.dbg.addr /and/ llvm.dbg.value. Importantly though its metadata
4646// should be for k since that is the variable that we are telling the debugger
4747// is no longer defined.
48- // CHECK: call void @llvm.dbg.value(metadata %T21move_function_dbginfo5KlassC* undef, metadata ![[K_COPYABLE_VALUE_TEST ]],
48+ // CHECK: call void @llvm.dbg.value(metadata %T21move_function_dbginfo5KlassC* undef, metadata ![[K_COPYABLE_VALUE_METADATA ]], metadata !DIExpression()), !dbg ![[ADDR_LOC]]
4949//
5050// CHECK: ret void
5151// CHECK-NEXT: }
@@ -82,8 +82,10 @@ public func copyableValueTest() {
8282
8383// CHECK-LABEL: define swiftcc void @"$s21move_function_dbginfo15copyableVarTestyyF"()
8484// CHECK: call void @llvm.dbg.declare(metadata %T21move_function_dbginfo5KlassC** %m.debug,
85- // CHECK: call void @llvm.dbg.addr(metadata %T21move_function_dbginfo5KlassC** %k, metadata ![[K_COPYABLE_VAR_METADATA:[0-9]+]],
86- // CHECK: call void @llvm.dbg.value(metadata %T21move_function_dbginfo5KlassC** undef, metadata ![[K_COPYABLE_VAR_METADATA]],
85+ // CHECK: call void @llvm.dbg.addr(metadata %T21move_function_dbginfo5KlassC** %k, metadata ![[K_COPYABLE_VAR_METADATA:[0-9]+]], metadata !DIExpression()), !dbg ![[ADDR_LOC:[0-9]*]]
86+ // CHECK: call void @llvm.dbg.value(metadata %T21move_function_dbginfo5KlassC** undef, metadata ![[K_COPYABLE_VAR_METADATA]], metadata !DIExpression()), !dbg ![[ADDR_LOC]]
87+ // TODO: Should this be a deref like the original?
88+ // CHECK: call void @llvm.dbg.addr(metadata %T21move_function_dbginfo5KlassC** %k, metadata ![[K_COPYABLE_VAR_METADATA]], metadata !DIExpression()), !dbg ![[ADDR_LOC]]
8789// CHECK: ret void
8890// CHECK-NEXT: }
8991//
@@ -124,8 +126,8 @@ public func copyableVarTest() {
124126// CHECK: @llvm.dbg.declare(metadata %swift.type** %T1,
125127// CHECK: @llvm.dbg.declare(metadata %swift.opaque** %x.debug,
126128// CHECK: @llvm.dbg.declare(metadata i8** %m.debug,
127- // CHECK: @llvm.dbg.addr(metadata i8** %k.debug, metadata ![[K_ADDR_LET_METADATA:[0-9]+]],
128- // CHECK: @llvm.dbg.value(metadata %swift.opaque* undef, metadata ![[K_ADDR_LET_METADATA]],
129+ // CHECK: @llvm.dbg.addr(metadata i8** %k.debug, metadata ![[K_ADDR_LET_METADATA:[0-9]+]], metadata !DIExpression(DW_OP_deref)), !dbg ![[ADDR_LOC:[0-9]*]]
130+ // CHECK: @llvm.dbg.value(metadata %swift.opaque* undef, metadata ![[K_ADDR_LET_METADATA]], metadata !DIExpression()), !dbg ![[ADDR_LOC]]
129131// CHECK: ret void
130132// CHECK-NEXT: }
131133//
@@ -174,8 +176,9 @@ public func addressOnlyValueTest<T : P>(_ x: T) {
174176// CHECK: @llvm.dbg.declare(metadata %swift.type** %T1,
175177// CHECK: @llvm.dbg.declare(metadata %swift.opaque** %x.debug,
176178// CHECK: @llvm.dbg.declare(metadata i8** %m.debug,
177- // CHECK: @llvm.dbg.addr(metadata i8** %k.debug, metadata ![[K_ADDRONLY_VAR_METADATA:[0-9]+]],
178- // CHECK: @llvm.dbg.value(metadata %swift.opaque* undef, metadata ![[K_ADDRONLY_VAR_METADATA]],
179+ // CHECK: @llvm.dbg.addr(metadata i8** %k.debug, metadata ![[K_ADDRONLY_VAR_METADATA:[0-9]+]], metadata !DIExpression(DW_OP_deref)), !dbg ![[ADDR_LOC:[0-9]*]]
180+ // CHECK: @llvm.dbg.value(metadata %swift.opaque* undef, metadata ![[K_ADDRONLY_VAR_METADATA]], metadata !DIExpression()), !dbg ![[ADDR_LOC]]
181+ // CHECK: @llvm.dbg.addr(metadata i8** %k.debug, metadata ![[K_ADDRONLY_VAR_METADATA]], metadata !DIExpression()), !dbg ![[ADDR_LOC]]
179182// CHECK: ret void
180183// CHECK-NEXT: }
181184//
@@ -222,3 +225,12 @@ public func addressOnlyVarTest<T : P>(_ x: T) {
222225 k = x
223226 k. doSomething ( )
224227}
228+
229+ //////////////////////////
230+ // Late Metadata Checks //
231+ //////////////////////////
232+
233+ // CHECK-DAG: ![[K_COPYABLE_VALUE_METADATA]] = !DILocalVariable(name: "k",
234+ // CHECK-DAG: ![[K_COPYABLE_VAR_METADATA]] = !DILocalVariable(name: "k",
235+ // CHECK-DAG: ![[K_ADDR_LET_METADATA]] = !DILocalVariable(name: "k",
236+ // CHECK-DAG: ![[K_ADDRONLY_VAR_METADATA]] = !DILocalVariable(name: "k",
0 commit comments