Skip to content

Commit 84d9238

Browse files
committed
Emit llvm.dbg.declare intrisics immediately after the described alloca.
This cleanup change doesn't change the semantics, but it makes the resulting IR much easier to read and debug.
1 parent 4753e86 commit 84d9238

17 files changed

+66
-58
lines changed

lib/IRGen/IRGenDebugInfo.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1998,8 +1998,13 @@ void IRGenDebugInfoImpl::emitDbgIntrinsic(
19981998
// the variable that is live throughout the function. With SIL
19991999
// optimizations this is not guaranteed and a variable can end up in
20002000
// two allocas (for example, one function inlined twice).
2001-
if (isa<llvm::AllocaInst>(Storage)) {
2002-
DBuilder.insertDeclare(Storage, Var, Expr, DL, BB);
2001+
if (auto *Alloca = dyn_cast<llvm::AllocaInst>(Storage)) {
2002+
auto *ParentBB = Alloca->getParent();
2003+
auto InsertBefore = std::next(Alloca->getIterator());
2004+
if (InsertBefore != ParentBB->end())
2005+
DBuilder.insertDeclare(Alloca, Var, Expr, DL, &*InsertBefore);
2006+
else
2007+
DBuilder.insertDeclare(Alloca, Var, Expr, DL, ParentBB);
20032008
return;
20042009
}
20052010

test/DebugInfo/any.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ func markUsed<T>(_ t: T) {}
44

55
func main() {
66
// CHECK: call void @llvm.dbg.declare(metadata %Any* {{.*}}, metadata ![[S:.*]], metadata !{{[0-9]+}}), !dbg ![[DBG:.*]]
7+
// CHECK: ![[S]] = !DILocalVariable(name: "s", {{.*}}line: [[@LINE+3]]
78
// CHECK: ![[SCOPE:.*]] = distinct !DILexicalBlock({{.*}}line: 5, column: 13)
8-
// CHECK: ![[S]] = !DILocalVariable(name: "s", {{.*}}line: [[@LINE+2]]
9-
// CHECK: ![[DBG]] = !DILocation(line: [[@LINE+1]], column: 7, scope: ![[SCOPE]])
9+
// CHECK: ![[DBG]] = !DILocation(line: [[@LINE+1]], column: 7, scope: ![[SCOPE:.*]])
1010
var s: Any = "hello world"
1111
var n: Any = 12
1212
var t: Any = (1,2)

test/DebugInfo/closure-args.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ func main() -> Void
1212
var backward_ptr =
1313
// CHECK: define internal {{.*}} i1 @_T04mainAAyyFSbSS_SStcfU_(
1414
// CHECK: %[[RANDOM_STR_ADDR:.*]] = alloca %TSS*, align {{(4|8)}}
15-
// CHECK: store %TSS* %{{.*}}, %TSS** %[[RANDOM_STR_ADDR]], align {{(4|8)}}
1615
// CHECK-NEXT: call void @llvm.dbg.declare(metadata %TSS** %[[RANDOM_STR_ADDR]], metadata !{{.*}}, metadata !{{[0-9]+}}), !dbg
16+
// CHECK: store %TSS* %{{.*}}, %TSS** %[[RANDOM_STR_ADDR]], align {{(4|8)}}
1717
// CHECK-DAG: !DILocalVariable(name: "lhs",{{.*}} line: [[@LINE+5]],
1818
// CHECK-DAG: !DILocalVariable(name: "rhs",{{.*}} line: [[@LINE+4]],
1919
// CHECK-DAG: !DILocalVariable(name: "random_string",{{.*}} line: 8,

test/DebugInfo/dbgvalue-insertpt.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
// RUN: %target-swift-frontend -g -emit-ir %s | %FileCheck %s
2+
// FIXME: This test should be testing a non-shadow-copied value instead.
23
for i in 0 ..< 3 {
34
// CHECK: %[[ALLOCA:[0-9]+]] = alloca %TSiSg
45
// CHECK: %i.addr = alloca i{{32|64}}
6+
// CHECK-NEXT: call void @llvm.dbg.declare(metadata i{{32|64}}* %i.addr,
7+
// CHECK-SAME: metadata ![[I:[0-9]+]],
58
// CHECK: %[[CAST:[0-9]+]] = bitcast %TSiSg* %[[ALLOCA]] to i{{32|64}}*
69
// CHECK: %[[LD:[0-9]+]] = load i{{32|64}}, i{{32|64}}* %[[CAST]]
710
// CHECK: br i1 {{%.*}}, label %[[FAIL:.*]], label %[[SUCCESS:.*]],
@@ -12,7 +15,5 @@ for i in 0 ..< 3 {
1215
// CHECK: ; <label>:[[NEXT_BB]]:
1316
// CHECK: %[[PHI_VAL:.*]] = phi i{{32|64}} [ %[[LD]], %[[SUCCESS]] ]
1417
// CHECK: store i{{32|64}} %[[PHI_VAL]], i{{32|64}}* %i.addr
15-
// CHECK-NEXT: call void @llvm.dbg.declare(metadata i{{32|64}}* %i.addr,
16-
// CHECK-SAME: metadata ![[I:[0-9]+]],
1718
// CHECK: ![[I]] = !DILocalVariable(name: "i",
1819
}

test/DebugInfo/debug_value_addr.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
// CHECK: define {{.*}}_T016debug_value_addr4testyxlF
1111
// CHECK: entry:
1212
// CHECK-NEXT: %[[TADDR:.*]] = alloca
13-
// CHECK: store %swift.opaque* %0, %swift.opaque** %[[TADDR:.*]], align
1413
// CHECK-NEXT: call void @llvm.dbg.declare({{.*}}%[[TADDR]]
14+
// CHECK: store %swift.opaque* %0, %swift.opaque** %[[TADDR:.*]], align
1515

1616
struct S<T> {
1717
var a : T

test/DebugInfo/generic_arg.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@ import StdlibUnittest
33
func foo<T>(_ x: T) -> () {
44
// CHECK: define {{.*}} @_T011generic_arg3fooyxlF
55
// CHECK: %[[T:.*]] = alloca %swift.type*
6-
// CHECK: %[[X:.*]] = alloca %swift.opaque*
7-
// CHECK: store %swift.type* %T, %swift.type** %[[T]],
86
// CHECK: call void @llvm.dbg.declare(metadata %swift.type** %[[T]],
97
// CHECK-SAME: metadata ![[T1:.*]], metadata ![[EMPTY:.*]])
10-
// CHECK: store %swift.opaque* %0, %swift.opaque** %[[X]],
8+
// CHECK: %[[X:.*]] = alloca %swift.opaque*
119
// CHECK: call void @llvm.dbg.declare(metadata %swift.opaque** %[[X]],
1210
// CHECK-SAME: metadata ![[X1:.*]], metadata ![[EMPTY]])
11+
// CHECK: store %swift.type* %T, %swift.type** %[[T]],
12+
// CHECK: store %swift.opaque* %0, %swift.opaque** %[[X]],
1313
// CHECK: ![[T1]] = !DILocalVariable(name: "$swift.type.T",
1414
// CHECK-SAME: flags: DIFlagArtificial)
1515
// CHECK: ![[EMPTY]] = !DIExpression()

test/DebugInfo/generic_arg3.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@ func apply<Type>(_ T : Type, fn: (Type) -> Type) -> Type { return fn(T) }
55
public func f<Type>(_ value : Type)
66
{
77
// CHECK: define {{.*}}_T012generic_arg31fyxlFxxcfU_
8-
// CHECK: store %swift.opaque* %1, %swift.opaque** %[[ALLOCA:.*]], align
9-
// CHECK: call void @llvm.dbg.declare(metadata %swift.opaque** %[[ALLOCA]],
8+
// CHECK: call void @llvm.dbg.declare(metadata %swift.opaque** %[[ALLOCA:[^,]+]],
109
// CHECK-SAME: metadata ![[ARG:.*]], metadata ![[EXPR:.*]])
10+
// CHECK: store %swift.opaque* %1, %swift.opaque** %[[ALLOCA]], align
1111
// No deref here: The argument is an Archetype and this implicitly indirect.
1212
// CHECK: ![[EXPR]] = !DIExpression()
1313
// CHECK: ![[TY:.*]] = !DICompositeType({{.*}}identifier: "_T012generic_arg31fyxlFQq_D"

test/DebugInfo/generic_arg4.swift

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,15 @@
33
public struct Q<T> {
44
let x: T
55
}
6-
// CHECK: define {{.*}}_T012generic_arg43fooySayAA1QVyxGGlF
7-
// CHECK: store %[[TY:.*]]* %0, %[[TY]]** %[[ALLOCA:.*]], align
8-
// CHECK: call void @llvm.dbg.declare(metadata %[[TY]]** %[[ALLOCA]],
9-
// CHECK-SAME: metadata ![[ARG:.*]], metadata ![[EXPR:.*]])
10-
// No deref here: the array argument is passed by value.
11-
// CHECK: ![[EXPR]] = !DIExpression()
12-
// CHECK: ![[ARG]] = !DILocalVariable(name: "arg", arg: 1,
13-
// CHECK-SAME: line: [[@LINE+2]], type: ![[TY:.*]])
14-
// CHECK: ![[TY]] = !DICompositeType({{.*}}identifier: "_T0Say12generic_arg41QVyAA3fooySayACyxGGlFQq_GGD")
6+
// CHECK: define {{.*}}_T012generic_arg43fooySayAA1QVyxGGlF
7+
// CHECK: call void @llvm.dbg.declare
8+
// CHECK: call void @llvm.dbg.declare(metadata %[[TY:.*]]** %[[ALLOCA:[^,]+]],
9+
// CHECK-SAME: metadata ![[ARG:.*]], metadata ![[EXPR:.*]])
10+
// CHECK: store %[[TY]]* %0, %[[TY]]** %[[ALLOCA]], align
11+
// No deref here: the array argument is passed by value.
12+
// CHECK: ![[EXPR]] = !DIExpression()
13+
// CHECK: ![[ARG]] = !DILocalVariable(name: "arg", arg: 1,
14+
// CHECK-SAME: line: [[@LINE+2]], type: ![[TY:.*]])
15+
// CHECK: ![[TY]] = !DICompositeType({{.*}}identifier: "_T0Say12generic_arg41QVyAA3fooySayACyxGGlFQq_GGD")
1516
public func foo<T>(_ arg: [Q<T>]) {
1617
}

test/DebugInfo/generic_arg5.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,10 @@ public struct S<Type>
77
public func foo<Type>(_ values : [S<Type>])
88
{
99
// CHECK: define {{.*}}_T012generic_arg53fooySayAA1SVyxGGlFAESgAEcfU_
10-
// CHECK: store %[[TY:.*]]* %1, %[[TY]]** %[[ALLOCA:.*]], align
11-
// CHECK: call void @llvm.dbg.declare(metadata %[[TY]]** %[[ALLOCA]],
10+
// CHECK: call void @llvm.dbg.declare
11+
// CHECK: call void @llvm.dbg.declare(metadata %[[TY:.*]]** %[[ALLOCA:[^,]+]],
1212
// CHECK-SAME: metadata ![[ARG:.*]], metadata ![[EXPR:.*]])
13+
// CHECK: store %[[TY]]* %1, %[[TY]]** %[[ALLOCA]], align
1314
// The argument is a by-ref struct and thus needs to be dereferenced.
1415
// CHECK: ![[ARG]] = !DILocalVariable(name: "arg", arg: 1,
1516
// CHECK-SAME: line: [[@LINE+4]],

test/DebugInfo/guard-let.swift

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,16 @@ func use<T>(_ t: T) {}
55
public func f(_ i : Int?)
66
{
77
// CHECK: define {{.*}}@_T04main1fySiSgF
8-
// CHECK: %[[PHI:.*]] = phi
98
// The shadow copy store should not have a location.
10-
// Note that the strore must be in the same scope or else it might defeat
9+
// Note that the store must be in the same scope or else it might defeat
1110
// livedebugvalues.
12-
// CHECK: store {{(i32|i64)}} %[[PHI]], {{(i32|i64)}}* %val.addr, align {{(4|8)}}, !dbg ![[DBG0:.*]]
13-
// CHECK: @llvm.dbg.declare(metadata {{(i32|i64)}}* %val.addr, {{.*}}, !dbg ![[DBG1:.*]]
14-
// CHECK: ![[F:.*]] = distinct !DISubprogram(name: "f",
15-
// CHECK: ![[BLK:.*]] = distinct !DILexicalBlock(scope: ![[F]],
16-
// CHECK: ![[DBG0]] = !DILocation(line: 0, scope: ![[BLK]])
17-
// CHECK: ![[DBG1]] = !DILocation(line: [[@LINE+1]], {{.*}}scope: ![[BLK]]
11+
// CHECK1: @llvm.dbg.declare(metadata {{(i32|i64)}}* %val.addr, {{.*}}, !dbg ![[DBG0:.*]]
12+
// CHECK1: %[[PHI:.*]] = phi
13+
// CHECK1: store {{(i32|i64)}} %[[PHI]], {{(i32|i64)}}* %val.addr, align {{(4|8)}}, !dbg ![[DBG1:.*]]
14+
// CHECK1: ![[F:.*]] = distinct !DISubprogram(name: "f",
15+
// CHECK1: ![[BLK:.*]] = distinct !DILexicalBlock(scope: ![[F]],
16+
// CHECK1: ![[DBG0]] = !DILocation(line: [[@LINE+2]],
17+
// CHECK1: ![[DBG1]] = !DILocation(line: 0, scope: ![[BLK]])
1818
guard let val = i else { return }
1919
use(val)
2020
}

test/DebugInfo/if.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@ func yieldValue() -> Int64? { return 23 }
44

55
// Verify that variables bound in the while statements are in distinct scopes.
66
if let val = yieldValue() {
7-
// CHECK: ![[SCOPE1:[0-9]+]] = distinct !DILexicalBlock(scope: ![[MAIN:[0-9]+]]
8-
// CHECK: !DILocalVariable(name: "val", scope: ![[SCOPE1]]
7+
// CHECK: !DILocalVariable(name: "val", scope: ![[SCOPE1:[0-9]+]]
8+
// CHECK: ![[SCOPE1]] = distinct !DILexicalBlock(scope: ![[MAIN:[0-9]+]]
99
}
1010
if let val = yieldValue() {
11-
// CHECK: ![[SCOPE2:[0-9]+]] = distinct !DILexicalBlock(scope: ![[MAIN]]
12-
// CHECK: !DILocalVariable(name: "val", scope: ![[SCOPE2]]
11+
// CHECK: !DILocalVariable(name: "val", scope: ![[SCOPE2:[0-9]+]]
12+
// CHECK: ![[SCOPE2]] = distinct !DILexicalBlock(scope: ![[MAIN]]
1313
}

test/DebugInfo/iuo_arg.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ class MyClass {
1717
func filterImage(_ image: UIImage!, _ doSomething:Bool) -> UIImage
1818
{
1919
// Test that image is in an alloca, but not an indirect location.
20-
// CHECK: store {{(i32|i64)}} %0, {{(i32|i64)}}* %[[ALLOCA:.*]], align
21-
// CHECK: call void @llvm.dbg.declare(metadata {{(i32|i64)}}* %[[ALLOCA]], metadata ![[IMAGE:.*]], metadata !{{[0-9]+}})
20+
// CHECK: call void @llvm.dbg.declare(metadata {{(i32|i64)}}* %[[ALLOCA:.*]], metadata ![[IMAGE:.*]], metadata !{{[0-9]+}})
21+
// CHECK: store {{(i32|i64)}} %0, {{(i32|i64)}}* %[[ALLOCA]], align
2222
// CHECK: ![[IMAGE]] = !DILocalVariable(name: "image", arg: 1
2323
// CHECK-NOT: flags:
2424
// CHECK-SAME: line: [[@LINE-7]]

test/DebugInfo/let.swift

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,9 @@ class DeepThought {
66

77
func foo() -> Int64 {
88
// CHECK: call void @llvm.dbg.declare(metadata %T3let11DeepThoughtC** {{.*}}, metadata ![[A:.*]], metadata !{{[0-9]+}})
9-
// CHECK: !DILocalVariable(name: "machine"
10-
// CHECK-NOT: flags:
11-
// CHECK-SAME: line: [[@LINE+1]],
9+
// CHECK-DAG: !DILocalVariable(name: "machine",{{.*}}line: [[@LINE+1]], type: !{{[0-9]+}})
1210
let machine = DeepThought()
13-
// CHECK: !DILocalVariable(name: "a"
14-
// CHECK-SAME: line: [[@LINE+1]],
11+
// CHECK-DAG: !DILocalVariable(name: "a", {{.*}}line: [[@LINE+1]],
1512
let a = machine.query()
1613
return a
1714
}

test/DebugInfo/patternmatching.swift

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
func markUsed<T>(_ t: T) {}
77

8+
// CHECK-SCOPES: define {{.*}}classifyPoint2
89
func classifyPoint2(_ p: (Double, Double)) {
910
func return_same (_ input : Double) -> Double
1011
{
@@ -24,33 +25,34 @@ switch p {
2425
// SIL-CHECK: dealloc_stack{{.*}}line:[[@LINE-1]]:17:cleanup
2526
// Verify that the branch has a location >= the cleanup.
2627
// SIL-CHECK-NEXT: br{{.*}}line:[[@LINE-3]]:17:cleanup
27-
// CHECK-SCOPES: call {{.*}}markUsed
28+
// CHECK-SCOPES: call void @llvm.dbg
29+
// CHECK-SCOPES: call void @llvm.dbg
30+
// CHECK-SCOPES: call void @llvm.dbg
2831
// CHECK-SCOPES: call void @llvm.dbg{{.*}}metadata ![[X1:[0-9]+]],
2932
// CHECK-SCOPES-SAME: !dbg ![[X1LOC:[0-9]+]]
3033
// CHECK-SCOPES: call void @llvm.dbg
3134
// CHECK-SCOPES: call void @llvm.dbg{{.*}}metadata ![[X2:[0-9]+]],
32-
// CHECK-SCOPES-SAME: !dbg ![[X2LOC:[0-9]+]]
35+
// CHECK-SCOPES-SAME: !dbg ![[X2LOC:[0-9]+]]
3336
// CHECK-SCOPES: call void @llvm.dbg
3437
// CHECK-SCOPES: call void @llvm.dbg{{.*}}metadata ![[X3:[0-9]+]],
35-
// CHECK-SCOPES-SAME: !dbg ![[X3LOC:[0-9]+]]
36-
// CHECK-SCOPES: !DILocalVariable(name: "x",
38+
// CHECK-SCOPES-SAME: !dbg ![[X3LOC:[0-9]+]]
3739
case (let x, let y) where x == -y:
3840
// Verify that all variables end up in separate appropriate scopes.
39-
// CHECK-SCOPES: !DILocalVariable(name: "x", scope: ![[SCOPE1:[0-9]+]],
40-
// CHECK-SCOPES-SAME: line: [[@LINE-3]]
41+
// CHECK-SCOPES: ![[X1]] = !DILocalVariable(name: "x", scope: ![[SCOPE1:[0-9]+]],
42+
// CHECK-SCOPES-SAME: line: [[@LINE-3]]
4143
// CHECK-SCOPES: ![[X1LOC]] = !DILocation(line: [[@LINE-4]], column: 15,
4244
// CHECK-SCOPES-SAME: scope: ![[SCOPE1]])
4345
// FIXME: ![[SCOPE1]] = distinct !DILexicalBlock({{.*}}line: [[@LINE-6]]
4446
markUsed(x)
4547
case (let x, let y) where x >= -10 && x < 10 && y >= -10 && y < 10:
46-
// CHECK-SCOPES: !DILocalVariable(name: "x", scope: ![[SCOPE2:[0-9]+]],
47-
// CHECK-SCOPES-SAME: line: [[@LINE-2]]
48+
// CHECK-SCOPES: ![[X2]] = !DILocalVariable(name: "x", scope: ![[SCOPE2:[0-9]+]],
49+
// CHECK-SCOPES-SAME: line: [[@LINE-2]]
4850
// CHECK-SCOPES: ![[X2LOC]] = !DILocation(line: [[@LINE-3]], column: 15,
4951
// CHECK-SCOPES-SAME: scope: ![[SCOPE2]])
5052
markUsed(x)
5153
case (let x, let y):
52-
// CHECK-SCOPES: !DILocalVariable(name: "x", scope: ![[SCOPE3:[0-9]+]],
53-
// CHECK-SCOPES-SAME: line: [[@LINE-2]]
54+
// CHECK-SCOPES: ![[X3]] = !DILocalVariable(name: "x", scope: ![[SCOPE3:[0-9]+]],
55+
// CHECK-SCOPES-SAME: line: [[@LINE-2]]
5456
// CHECK-SCOPES: ![[X3LOC]] = !DILocation(line: [[@LINE-3]], column: 15,
5557
// CHECK-SCOPES-SAME: scope: ![[SCOPE3]])
5658
markUsed(x)

test/DebugInfo/returnlocation.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import Foundation
1212
// CHECK_NONE: define{{( protected)?}} {{.*}}void {{.*}}none
1313
public func none(_ a: inout Int64) {
1414
// CHECK_NONE: call void @llvm.dbg{{.*}}, !dbg
15+
// CHECK_NONE: store{{.*}}, !dbg
1516
// CHECK_NONE: !dbg ![[NONE_INIT:.*]]
1617
a -= 2
1718
// CHECK_NONE: ret {{.*}}, !dbg ![[NONE_RET:.*]]

test/DebugInfo/shadowcopy-linetable.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@ func foo(_ x: inout Int64) {
77
// line 0), but the code to load the value from the inout storage is
88
// not.
99
// CHECK: %[[X:.*]] = alloca %Ts5Int64V*, align {{(4|8)}}
10+
// CHECK-NEXT: call void @llvm.dbg.declare
1011
// CHECK: store %Ts5Int64V* %0, %Ts5Int64V** %[[X]], align {{(4|8)}}
1112
// CHECK-SAME: !dbg ![[LOC0:.*]]
12-
// CHECK-NEXT: call void @llvm.dbg.declare
1313
// CHECK-NEXT: getelementptr inbounds %Ts5Int64V, %Ts5Int64V* %0, i32 0, i32 0,
1414
// CHECK-SAME: !dbg ![[LOC1:.*]]
1515
// CHECK: ![[LOC0]] = !DILocation(line: 0,

test/DebugInfo/while.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@ func yieldValues() -> Int64? { return .none }
44

55
// Verify that variables bound in the while statements are in distinct scopes.
66
while let val = yieldValues() {
7-
// CHECK: ![[SCOPE1:[0-9]+]] = distinct !DILexicalBlock(scope: ![[MAIN:[0-9]+]]
8-
// CHECK: !DILocalVariable(name: "val", scope: ![[SCOPE1]]
7+
// CHECK: !DILocalVariable(name: "val", scope: ![[SCOPE1:[0-9]+]]
8+
// CHECK: ![[SCOPE1]] = distinct !DILexicalBlock(scope: ![[MAIN:[0-9]+]]
99
}
1010
while let val = yieldValues() {
11-
// CHECK: ![[SCOPE2:[0-9]+]] = distinct !DILexicalBlock(scope: ![[MAIN]]
12-
// CHECK: !DILocalVariable(name: "val", scope: ![[SCOPE2]]
11+
// CHECK: !DILocalVariable(name: "val", scope: ![[SCOPE2:[0-9]+]]
12+
// CHECK: ![[SCOPE2]] = distinct !DILexicalBlock(scope: ![[MAIN]]
1313
}

0 commit comments

Comments
 (0)