Merge pull request #79833 from rastogishubham/FixHopToExe

[DebugInfo] Use Stmt EndLoc if SILLocation passed in is the Stmt EndLoc.
This commit is contained in:
Shubham Sandeep Rastogi
2025-03-19 12:02:28 -07:00
committed by GitHub
2 changed files with 31 additions and 1 deletions

View File

@@ -290,8 +290,14 @@ RegularLocation::getDebugOnlyExtendedASTNodeLoc(SILLocation L,
return new (Module) ExtendedASTNodeLoc(Empty, {D, 0});
if (auto E = L.getAsASTNode<Expr>())
return new (Module) ExtendedASTNodeLoc(Empty, {E, 0});
if (auto S = L.getAsASTNode<Stmt>())
if (auto S = L.getAsASTNode<Stmt>()) {
// If the source location of the SILLocation passed in matches the EndLoc of
// the Stmt, set the primary ASTNodeTy integer to 1, so that
// SILLocation::getSourceLoc returns the EndLoc when queried.
if (L.getSourceLocForDebugging() == S->getEndLoc())
Empty.setInt(1);
return new (Module) ExtendedASTNodeLoc(Empty, {S, 0});
}
auto P = L.getAsASTNode<Pattern>();
return new (Module) ExtendedASTNodeLoc(Empty, {P, 0});
}

View File

@@ -0,0 +1,24 @@
// RUN: %target-swiftc_driver %s -c -g -Onone -o - -Xllvm -sil-print-debuginfo -emit-sil -parse-as-library -module-name m | %FileCheck %s
// This test ensures that the hop_to_executor source location matches the end of the do block
func getTimestamp(x: Int) async -> Int {
return 40 + x
}
func work() {}
func foo() async {
do {
work()
async let timestamp2 = getTimestamp(x:2)
print(await timestamp2)
// CHECK: %[[REG:[0-9]+]] = function_ref @swift_asyncLet_finish : $@convention(thin) @async (Builtin.RawPointer, Builtin.RawPointer) -> (), loc {{.*}}:[[@LINE+3]]
// CHECK-NEXT: %{{[0-9]+}} = apply %[[REG]](%{{[0-9]+}}, %{{[0-9]+}}) : $@convention(thin) @async (Builtin.RawPointer, Builtin.RawPointer) -> (), loc{{.*}}:[[@LINE+2]]
// CHECK-NEXT: hop_to_executor %0, loc * {{.*}}:[[@LINE+1]]
}
work()
}
@main enum entry {
static func main() async {
await foo()
}
}