nfc: refactor Backtracing/Crash.swift

This test fused both the CHECK directives and the
source code into one file, and is sensitive to the line numbers
that source code appears on in that file. Thus, any attempts to
add new lines to this test would break it.

This refactoring moves the source code to a separate file so
its line numbers stay stable.
This commit is contained in:
Kavon Farvardin
2025-08-11 15:44:23 -07:00
parent e49fd88ccb
commit afd633d25d
2 changed files with 78 additions and 80 deletions

View File

@@ -1,8 +1,8 @@
// RUN: %empty-directory(%t)
// RUN: %target-build-swift %s -parse-as-library -Onone -g -o %t/Crash
// RUN: %target-build-swift %s -parse-as-library -Onone -o %t/CrashNoDebug
// RUN: %target-build-swift %s -parse-as-library -O -g -o %t/CrashOpt
// RUN: %target-build-swift %s -parse-as-library -O -o %t/CrashOptNoDebug
// RUN: %target-build-swift %S/Inputs/Crash.swift -parse-as-library -Onone -g -o %t/Crash
// RUN: %target-build-swift %S/Inputs/Crash.swift -parse-as-library -Onone -o %t/CrashNoDebug
// RUN: %target-build-swift %S/Inputs/Crash.swift -parse-as-library -O -g -o %t/CrashOpt
// RUN: %target-build-swift %S/Inputs/Crash.swift -parse-as-library -O -o %t/CrashOptNoDebug
// RUN: %target-codesign %t/Crash
// RUN: %target-codesign %t/CrashNoDebug
// RUN: %target-codesign %t/CrashOpt
@@ -20,45 +20,17 @@
// REQUIRES: backtracing
// REQUIRES: OS=macosx || OS=linux-gnu
func level1() {
level2()
}
func level2() {
level3()
}
func level3() {
level4()
}
func level4() {
level5()
}
func level5() {
print("About to crash")
let ptr = UnsafeMutablePointer<Int>(bitPattern: 4)!
ptr.pointee = 42
}
@main
struct Crash {
static func main() {
level1()
}
}
// CHECK: *** Program crashed: Bad pointer dereference at 0x{{0+}}4 ***
// CHECK: Thread 0 {{(".*" )?}}crashed:
// CHECK: 0 0x{{[0-9a-f]+}} level5() + {{[0-9]+}} in Crash at {{.*}}/Crash.swift:42:15
// CHECK-NEXT: 1 [ra] 0x{{[0-9a-f]+}} level4() + {{[0-9]+}} in Crash at {{.*}}/Crash.swift:36:3
// CHECK-NEXT: 2 [ra] 0x{{[0-9a-f]+}} level3() + {{[0-9]+}} in Crash at {{.*}}/Crash.swift:32:3
// CHECK-NEXT: 3 [ra] 0x{{[0-9a-f]+}} level2() + {{[0-9]+}} in Crash at {{.*}}/Crash.swift:28:3
// CHECK-NEXT: 4 [ra] 0x{{[0-9a-f]+}} level1() + {{[0-9]+}} in Crash at {{.*}}/Crash.swift:24:3
// CHECK-NEXT: 5 [ra] 0x{{[0-9a-f]+}} static Crash.main() + {{[0-9]+}} in Crash at {{.*}}/Crash.swift:48:5
// CHECK: 0 0x{{[0-9a-f]+}} level5() + {{[0-9]+}} in Crash at {{.*}}/Crash.swift:20:15
// CHECK-NEXT: 1 [ra] 0x{{[0-9a-f]+}} level4() + {{[0-9]+}} in Crash at {{.*}}/Crash.swift:14:3
// CHECK-NEXT: 2 [ra] 0x{{[0-9a-f]+}} level3() + {{[0-9]+}} in Crash at {{.*}}/Crash.swift:10:3
// CHECK-NEXT: 3 [ra] 0x{{[0-9a-f]+}} level2() + {{[0-9]+}} in Crash at {{.*}}/Crash.swift:6:3
// CHECK-NEXT: 4 [ra] 0x{{[0-9a-f]+}} level1() + {{[0-9]+}} in Crash at {{.*}}/Crash.swift:2:3
// CHECK-NEXT: 5 [ra] 0x{{[0-9a-f]+}} static Crash.main() + {{[0-9]+}} in Crash at {{.*}}/Crash.swift:26:5
// CHECK-NEXT: 6 [ra] [system] 0x{{[0-9a-f]+}} static Crash.$main() + {{[0-9]+}} in Crash at {{.*}}/<compiler-generated>
// CHECK-NEXT: 7 [ra] [system] 0x{{[0-9a-f]+}} main + {{[0-9]+}} in Crash at {{.*}}/Crash.swift
@@ -72,59 +44,57 @@ struct Crash {
// FRIENDLY: Thread 0 {{(".*" )?}}crashed:
// FRIENDLY: 0 level5() + {{[0-9]+}} in Crash at {{.*}}/Crash.swift:42:15
// FRIENDLY: 0 level5() + {{[0-9]+}} in Crash at {{.*}}/Crash.swift:20:15
// FRIENDLY: 40| print("About to crash")
// FRIENDLY-NEXT: 41| let ptr = UnsafeMutablePointer<Int>(bitPattern: 4)!
// FRIENDLY-NEXT: 42| ptr.pointee = 42
// FRIENDLY: 18| print("About to crash")
// FRIENDLY-NEXT: 19| let ptr = UnsafeMutablePointer<Int>(bitPattern: 4)!
// FRIENDLY-NEXT: 20| ptr.pointee = 42
// FRIENDLY-NEXT: | ^
// FRIENDLY-NEXT: 43| }
// FRIENDLY-NEXT: 44|
// FRIENDLY-NEXT: 21| }
// FRIENDLY-NEXT: 22|
// FRIENDLY: 1 level4() + {{[0-9]+}} in Crash at {{.*}}/Crash.swift:36:3
// FRIENDLY: 1 level4() + {{[0-9]+}} in Crash at {{.*}}/Crash.swift:14:3
// FRIENDLY: 34|
// FRIENDLY-NEXT: 35| func level4() {
// FRIENDLY-NEXT: 36| level5()
// FRIENDLY: 12|
// FRIENDLY-NEXT: 13| func level4() {
// FRIENDLY-NEXT: 14| level5()
// FRIENDLY-NEXT: | ^
// FRIENDLY-NEXT: 37| }
// FRIENDLY-NEXT: 38|
// FRIENDLY-NEXT: 15| }
// FRIENDLY-NEXT: 16|
// FRIENDLY: 2 level3() + {{[0-9]+}} in Crash at {{.*}}/Crash.swift:32:3
// FRIENDLY: 2 level3() + {{[0-9]+}} in Crash at {{.*}}/Crash.swift:10:3
// FRIENDLY: 30|
// FRIENDLY-NEXT: 31| func level3() {
// FRIENDLY-NEXT: 32| level4()
// FRIENDLY: 8|
// FRIENDLY-NEXT: 9| func level3() {
// FRIENDLY-NEXT: 10| level4()
// FRIENDLY-NEXT: | ^
// FRIENDLY-NEXT: 33| }
// FRIENDLY-NEXT: 34|
// FRIENDLY-NEXT: 11| }
// FRIENDLY-NEXT: 12|
// FRIENDLY: 3 level2() + {{[0-9]+}} in Crash at {{.*}}/Crash.swift:28:3
// FRIENDLY: 3 level2() + {{[0-9]+}} in Crash at {{.*}}/Crash.swift:6:3
// FRIENDLY: 26|
// FRIENDLY-NEXT: 27| func level2() {
// FRIENDLY-NEXT: 28| level3()
// FRIENDLY: 4|
// FRIENDLY-NEXT: 5| func level2() {
// FRIENDLY-NEXT: 6| level3()
// FRIENDLY-NEXT: | ^
// FRIENDLY-NEXT: 29| }
// FRIENDLY-NEXT: 30|
// FRIENDLY-NEXT: 7| }
// FRIENDLY-NEXT: 8|
// FRIENDLY: 4 level1() + {{[0-9]+}} in Crash at {{.*}}/Crash.swift:24:3
// FRIENDLY: 4 level1() + {{[0-9]+}} in Crash at {{.*}}/Crash.swift:2:3
// FRIENDLY: 22|
// FRIENDLY-NEXT: 23| func level1() {
// FRIENDLY-NEXT: 24| level2()
// FRIENDLY: 1| func level1() {
// FRIENDLY-NEXT: 2| level2()
// FRIENDLY-NEXT: | ^
// FRIENDLY-NEXT: 25| }
// FRIENDLY-NEXT: 26|
// FRIENDLY-NEXT: 3| }
// FRIENDLY: 5 static Crash.main() + {{[0-9]+}} in Crash at {{.*}}/Crash.swift:48:5
// FRIENDLY: 5 static Crash.main() + {{[0-9]+}} in Crash at {{.*}}/Crash.swift:26:5
// FRIENDLY: 46| struct Crash {
// FRIENDLY-NEXT: 47| static func main() {
// FRIENDLY-NEXT: 48| level1()
// FRIENDLY: 24| struct Crash {
// FRIENDLY-NEXT: 25| static func main() {
// FRIENDLY-NEXT: 26| level1()
// FRIENDLY-NEXT: | ^
// FRIENDLY-NEXT: 49| }
// FRIENDLY-NEXT: 50| }
// FRIENDLY-NEXT: 27| }
// FRIENDLY-NEXT: 28| }
// NODEBUG: *** Program crashed: Bad pointer dereference at 0x{{0*}}4 ***
@@ -149,12 +119,12 @@ struct Crash {
// OPTIMIZED: Thread 0 {{(".*" )?}}crashed:
// OPTIMIZED: 0 [inlined] 0x{{[0-9a-f]+}} level5() in CrashOpt at {{.*}}/Crash.swift:42:15
// OPTIMIZED-NEXT: 1 [inlined] 0x{{[0-9a-f]+}} level4() in CrashOpt at {{.*}}/Crash.swift:36:3
// OPTIMIZED-NEXT: 2 [inlined] 0x{{[0-9a-f]+}} level3() in CrashOpt at {{.*}}/Crash.swift:32:3
// OPTIMIZED-NEXT: 3 [inlined] 0x{{[0-9a-f]+}} level2() in CrashOpt at {{.*}}/Crash.swift:28:3
// OPTIMIZED-NEXT: 4 [inlined] 0x{{[0-9a-f]+}} level1() in CrashOpt at {{.*}}/Crash.swift:24:3
// OPTIMIZED-NEXT: 5 [inlined] 0x{{[0-9a-f]+}} static Crash.main() in CrashOpt at {{.*}}/Crash.swift:48:5
// OPTIMIZED: 0 [inlined] 0x{{[0-9a-f]+}} level5() in CrashOpt at {{.*}}/Crash.swift:20:15
// OPTIMIZED-NEXT: 1 [inlined] 0x{{[0-9a-f]+}} level4() in CrashOpt at {{.*}}/Crash.swift:14:3
// OPTIMIZED-NEXT: 2 [inlined] 0x{{[0-9a-f]+}} level3() in CrashOpt at {{.*}}/Crash.swift:10:3
// OPTIMIZED-NEXT: 3 [inlined] 0x{{[0-9a-f]+}} level2() in CrashOpt at {{.*}}/Crash.swift:6:3
// OPTIMIZED-NEXT: 4 [inlined] 0x{{[0-9a-f]+}} level1() in CrashOpt at {{.*}}/Crash.swift:2:3
// OPTIMIZED-NEXT: 5 [inlined] 0x{{[0-9a-f]+}} static Crash.main() in CrashOpt at {{.*}}/Crash.swift:26:5
// OPTIMIZED: {{6|7}} [system] 0x{{[0-9a-f]+}} main + {{[0-9]+}} in CrashOpt at {{.*}}
// OPTIMIZED: Registers:

View File

@@ -0,0 +1,28 @@
func level1() {
level2()
}
func level2() {
level3()
}
func level3() {
level4()
}
func level4() {
level5()
}
func level5() {
print("About to crash")
let ptr = UnsafeMutablePointer<Int>(bitPattern: 4)!
ptr.pointee = 42
}
@main
struct Crash {
static func main() {
level1()
}
}