@@ -39,13 +39,13 @@ public protocol P {
39
39
// CHECK: call void @llvm.dbg.declare(metadata {{.*}}** %m.debug, metadata ![[M_COPYABLE_VALUE_TEST:[0-9]*]],
40
40
//
41
41
// 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]*]]
43
43
//
44
44
// Our undef should be an llvm.dbg.value. Counter-intuitively this works for
45
45
// both llvm.dbg.addr /and/ llvm.dbg.value. Importantly though its metadata
46
46
// should be for k since that is the variable that we are telling the debugger
47
47
// 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]]
49
49
//
50
50
// CHECK: ret void
51
51
// CHECK-NEXT: }
@@ -82,8 +82,10 @@ public func copyableValueTest() {
82
82
83
83
// CHECK-LABEL: define swiftcc void @"$s21move_function_dbginfo15copyableVarTestyyF"()
84
84
// 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]]
87
89
// CHECK: ret void
88
90
// CHECK-NEXT: }
89
91
//
@@ -124,8 +126,8 @@ public func copyableVarTest() {
124
126
// CHECK: @llvm.dbg.declare(metadata %swift.type** %T1,
125
127
// CHECK: @llvm.dbg.declare(metadata %swift.opaque** %x.debug,
126
128
// 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]]
129
131
// CHECK: ret void
130
132
// CHECK-NEXT: }
131
133
//
@@ -174,8 +176,9 @@ public func addressOnlyValueTest<T : P>(_ x: T) {
174
176
// CHECK: @llvm.dbg.declare(metadata %swift.type** %T1,
175
177
// CHECK: @llvm.dbg.declare(metadata %swift.opaque** %x.debug,
176
178
// 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]]
179
182
// CHECK: ret void
180
183
// CHECK-NEXT: }
181
184
//
@@ -222,3 +225,12 @@ public func addressOnlyVarTest<T : P>(_ x: T) {
222
225
k = x
223
226
k. doSomething ( )
224
227
}
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