Skip to content

Commit f39ccb4

Browse files
committed
[move-function] Make tests verify that all inserted dbg info at the llvm level uses the same loc.
The backend in order to emit correct dwarf requires the debug info part of the dbg.addr or dbg.value to be exactly the same, including the line info. We obey this in the examples in tree today and these test additions validate that they continue to work correctly.
1 parent 87d41a4 commit f39ccb4

File tree

1 file changed

+11
-8
lines changed

1 file changed

+11
-8
lines changed

test/DebugInfo/move_function_dbginfo.swift

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,13 @@ public protocol P {
3838
// CHECK: call void @llvm.dbg.declare(metadata {{.*}}** %m.debug, metadata ![[M_COPYABLE_VALUE_TEST:[0-9]*]],
3939
//
4040
// We should have a llvm.dbg.addr for k since we moved it.
41-
// CHECK: call void @llvm.dbg.addr(metadata {{.*}}** %k.debug, metadata ![[K_COPYABLE_VALUE_TEST:[0-9]*]],
41+
// CHECK: call void @llvm.dbg.addr(metadata {{.*}}** %k.debug, metadata ![[K_COPYABLE_VALUE_TEST:[0-9]*]], metadata !DIExpression()), !dbg ![[ADDR_LOC:[0-9]*]]
4242
//
4343
// Our undef should be an llvm.dbg.value. Counter-intuitively this works for
4444
// both llvm.dbg.addr /and/ llvm.dbg.value. Importantly though its metadata
4545
// should be for k since that is the variable that we are telling the debugger
4646
// is no longer defined.
47-
// CHECK: call void @llvm.dbg.value(metadata %T21move_function_dbginfo5KlassC* undef, metadata ![[K_COPYABLE_VALUE_TEST]],
47+
// CHECK: call void @llvm.dbg.value(metadata %T21move_function_dbginfo5KlassC* undef, metadata ![[K_COPYABLE_VALUE_TEST]], metadata !DIExpression()), !dbg ![[ADDR_LOC]]
4848
//
4949
// CHECK: ret void
5050
// CHECK-NEXT: }
@@ -81,8 +81,10 @@ public func copyableValueTest() {
8181

8282
// CHECK-LABEL: define swiftcc void @"$s21move_function_dbginfo15copyableVarTestyyF"()
8383
// CHECK: call void @llvm.dbg.declare(metadata %T21move_function_dbginfo5KlassC** %m.debug,
84-
// CHECK: call void @llvm.dbg.addr(metadata %T21move_function_dbginfo5KlassC** %k, metadata ![[K_COPYABLE_VAR_METADATA:[0-9]+]],
85-
// CHECK: call void @llvm.dbg.value(metadata %T21move_function_dbginfo5KlassC** undef, metadata ![[K_COPYABLE_VAR_METADATA]],
84+
// 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]*]]
85+
// CHECK: call void @llvm.dbg.value(metadata %T21move_function_dbginfo5KlassC** undef, metadata ![[K_COPYABLE_VAR_METADATA]], metadata !DIExpression()), !dbg ![[ADDR_LOC]]
86+
// TODO: Should this be a deref like the original?
87+
// CHECK: call void @llvm.dbg.addr(metadata %T21move_function_dbginfo5KlassC** %k, metadata ![[K_COPYABLE_VAR_METADATA]], metadata !DIExpression()), !dbg ![[ADDR_LOC]]
8688
// CHECK: ret void
8789
// CHECK-NEXT: }
8890
//
@@ -123,8 +125,8 @@ public func copyableVarTest() {
123125
// CHECK: @llvm.dbg.declare(metadata %swift.type** %T1,
124126
// CHECK: @llvm.dbg.declare(metadata %swift.opaque** %x.debug,
125127
// CHECK: @llvm.dbg.declare(metadata i8** %m.debug,
126-
// CHECK: @llvm.dbg.addr(metadata i8** %k.debug, metadata ![[K_ADDR_LET_METADATA:[0-9]+]],
127-
// CHECK: @llvm.dbg.value(metadata %swift.opaque* undef, metadata ![[K_ADDR_LET_METADATA]],
128+
// 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]*]]
129+
// CHECK: @llvm.dbg.value(metadata %swift.opaque* undef, metadata ![[K_ADDR_LET_METADATA]], metadata !DIExpression()), !dbg ![[ADDR_LOC]]
128130
// CHECK: ret void
129131
// CHECK-NEXT: }
130132
//
@@ -173,8 +175,9 @@ public func addressOnlyValueTest<T : P>(_ x: T) {
173175
// CHECK: @llvm.dbg.declare(metadata %swift.type** %T1,
174176
// CHECK: @llvm.dbg.declare(metadata %swift.opaque** %x.debug,
175177
// CHECK: @llvm.dbg.declare(metadata i8** %m.debug,
176-
// CHECK: @llvm.dbg.addr(metadata i8** %k.debug, metadata ![[K_ADDRONLY_VAR_METADATA:[0-9]+]],
177-
// CHECK: @llvm.dbg.value(metadata %swift.opaque* undef, metadata ![[K_ADDRONLY_VAR_METADATA]],
178+
// 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]*]]
179+
// CHECK: @llvm.dbg.value(metadata %swift.opaque* undef, metadata ![[K_ADDRONLY_VAR_METADATA]], metadata !DIExpression()), !dbg ![[ADDR_LOC]]
180+
// CHECK: @llvm.dbg.addr(metadata i8** %k.debug, metadata ![[K_ADDRONLY_VAR_METADATA]], metadata !DIExpression()), !dbg ![[ADDR_LOC]]
178181
// CHECK: ret void
179182
// CHECK-NEXT: }
180183
//

0 commit comments

Comments
 (0)