@@ -1190,6 +1190,11 @@ final class BuildPlanTests: XCTestCase {
11901190#if !os(Windows) // FIXME(5473) - modules flags on Windows dropped
11911191 args += [ " -fmodules-cache-path= \( buildPath. appending ( components: " ModuleCache " ) ) " ]
11921192#endif
1193+
1194+ if hostTriple. isLinux ( ) {
1195+ args += [ " -fno-omit-frame-pointer " ]
1196+ }
1197+
11931198 XCTAssertEqual ( try ext. basicArguments ( isCXX: false ) , args)
11941199 XCTAssertEqual ( try ext. objects, [ buildPath. appending ( components: " extlib.build " , " extlib.c.o " ) ] )
11951200 XCTAssertEqual ( ext. moduleMap, buildPath. appending ( components: " extlib.build " , " module.modulemap " ) )
@@ -1222,6 +1227,11 @@ final class BuildPlanTests: XCTestCase {
12221227#if !os(Windows) // FIXME(5473) - modules flags on Windows dropped
12231228 args += [ " -fmodules-cache-path= \( buildPath. appending ( components: " ModuleCache " ) ) " ]
12241229#endif
1230+
1231+ if hostTriple. isLinux ( ) {
1232+ args += [ " -fno-omit-frame-pointer " ]
1233+ }
1234+
12251235 XCTAssertEqual ( try exe. basicArguments ( isCXX: false ) , args)
12261236 XCTAssertEqual ( try exe. objects, [ buildPath. appending ( components: " exe.build " , " main.c.o " ) ] )
12271237 XCTAssertEqual ( exe. moduleMap, nil )
@@ -1453,7 +1463,7 @@ final class BuildPlanTests: XCTestCase {
14531463 XCTAssertMatch ( contents, . contains( #"-std=c++1z","-c"," \#( Pkg . appending ( components: " Sources " , " lib " , " libx.cpp " ) . escapedPathString ( ) ) "# ) )
14541464
14551465 let swiftInteropLib = try result. target ( for: " swiftInteropLib " ) . swiftTarget ( ) . compileArguments ( )
1456- XCTAssertMatch ( swiftInteropLib, [ . anySequence, " -cxx-interoperability-mode=default " , " -Xcc " , " -std=c++1z " , . end ] )
1466+ XCTAssertMatch ( swiftInteropLib, [ . anySequence, " -cxx-interoperability-mode=default " , " -Xcc " , " -std=c++1z " , . anySequence ] )
14571467 let swiftLib = try result. target ( for: " swiftLib " ) . swiftTarget ( ) . compileArguments ( )
14581468 XCTAssertNoMatch ( swiftLib, [ . anySequence, " -Xcc " , " -std=c++1z " , . anySequence] )
14591469 }
@@ -1516,6 +1526,11 @@ final class BuildPlanTests: XCTestCase {
15161526#if !os(Windows) // FIXME(5473) - modules flags on Windows dropped
15171527 args += [ " -fmodules-cache-path= \( buildPath. appending ( components: " ModuleCache " ) ) " ]
15181528#endif
1529+
1530+ if hostTriple. isLinux ( ) {
1531+ args += [ " -fno-omit-frame-pointer " ]
1532+ }
1533+
15191534 XCTAssertEqual ( try lib. basicArguments ( isCXX: false ) , args)
15201535 XCTAssertEqual ( try lib. objects, [ buildPath. appending ( components: " lib.build " , " lib.c.o " ) ] )
15211536 XCTAssertEqual ( lib. moduleMap, buildPath. appending ( components: " lib.build " , " module.modulemap " ) )
@@ -2480,6 +2495,11 @@ final class BuildPlanTests: XCTestCase {
24802495#if !os(Windows) // FIXME(5473) - modules flags on Windows dropped
24812496 expectedExeBasicArgs += [ " -fmodules-cache-path= \( buildPath. appending ( components: " ModuleCache " ) ) " ]
24822497#endif
2498+
2499+ if triple. isLinux ( ) {
2500+ expectedExeBasicArgs += [ " -fno-omit-frame-pointer " ]
2501+ }
2502+
24832503 XCTAssertEqual ( try exe. basicArguments ( isCXX: false ) , expectedExeBasicArgs)
24842504 XCTAssertEqual ( try exe. objects, [ buildPath. appending ( components: " exe.build " , " main.c.o " ) ] )
24852505 XCTAssertEqual ( exe. moduleMap, nil )
@@ -2498,6 +2518,11 @@ final class BuildPlanTests: XCTestCase {
24982518 if shouldHaveModules {
24992519 expectedLibBasicArgs += [ " -fmodules-cache-path= \( buildPath. appending ( components: " ModuleCache " ) ) " ]
25002520 }
2521+
2522+ if triple. isLinux ( ) {
2523+ expectedLibBasicArgs += [ " -fno-omit-frame-pointer " ]
2524+ }
2525+
25012526 XCTAssertEqual ( try lib. basicArguments ( isCXX: true ) , expectedLibBasicArgs)
25022527
25032528 XCTAssertEqual ( try lib. objects, [ buildPath. appending ( components: " lib.build " , " lib.cpp.o " ) ] )
@@ -3382,21 +3407,71 @@ final class BuildPlanTests: XCTestCase {
33823407 let result = try createResult ( for: . x86_64Linux)
33833408
33843409 let dep = try result. target ( for: " t1 " ) . swiftTarget ( ) . compileArguments ( )
3385- XCTAssertMatch ( dep, [ . anySequence, " -DDEP " , . end] )
3410+ XCTAssertMatch ( dep, [ . anySequence, " -DDEP " , " -Xcc " , " -fno-omit-frame-pointer " , . end] )
33863411
33873412 let cbar = try result. target ( for: " cbar " ) . clangTarget ( ) . basicArguments ( isCXX: false )
3388- XCTAssertMatch ( cbar, [ . anySequence, " -DCCC=2 " , " -I \( A . appending ( components: " Sources " , " cbar " , " Sources " , " headers " ) ) " , " -I \( A . appending ( components: " Sources " , " cbar " , " Sources " , " cppheaders " ) ) " , " -Icfoo " , " -L " , " cbar " , " -Icxxfoo " , " -L " , " cxxbar " , . end] )
3413+ XCTAssertMatch ( cbar, [ . anySequence, " -DCCC=2 " , " -I \( A . appending ( components: " Sources " , " cbar " , " Sources " , " headers " ) ) " , " -I \( A . appending ( components: " Sources " , " cbar " , " Sources " , " cppheaders " ) ) " , " -Icfoo " , " -L " , " cbar " , " -Icxxfoo " , " -L " , " cxxbar " , " -fno-omit-frame-pointer " , . end] )
33893414
33903415 let bar = try result. target ( for: " bar " ) . swiftTarget ( ) . compileArguments ( )
3391- XCTAssertMatch ( bar, [ . anySequence, " -DLINUX " , " -Isfoo " , " -L " , " sbar " , " -cxx-interoperability-mode=default " , " -enable-upcoming-feature " , " BestFeature " , . end] )
3416+ XCTAssertMatch ( bar, [ . anySequence, " -DLINUX " , " -Isfoo " , " -L " , " sbar " , " -cxx-interoperability-mode=default " , " -enable-upcoming-feature " , " BestFeature " , " -Xcc " , " -fno-omit-frame-pointer " , . end] )
33923417
33933418 let exe = try result. target ( for: " exe " ) . swiftTarget ( ) . compileArguments ( )
3394- XCTAssertMatch ( exe, [ . anySequence, " -DFOO " , . end] )
3419+ XCTAssertMatch ( exe, [ . anySequence, " -DFOO " , " -Xcc " , " -fno-omit-frame-pointer " , . end] )
33953420
33963421 let linkExe = try result. buildProduct ( for: " exe " ) . linkArguments ( )
33973422 XCTAssertMatch ( linkExe, [ . anySequence, " -lsqlite3 " , " -llibz " , " -framework " , " best " , " -Ilfoo " , " -L " , " lbar " , . end] )
33983423 }
33993424
3425+ // omit frame pointers explicitly set to true
3426+ do {
3427+ let result = try BuildPlanResult ( plan: BuildPlan (
3428+ buildParameters: mockBuildParameters (
3429+ destinationTriple: . x86_64Linux,
3430+ omitFramePointers: true
3431+ ) ,
3432+ graph: graph,
3433+ fileSystem: fs,
3434+ observabilityScope: observability. topScope
3435+ ) )
3436+
3437+ let dep = try result. target ( for: " t1 " ) . swiftTarget ( ) . compileArguments ( )
3438+ XCTAssertMatch ( dep, [ . anySequence, " -DDEP " , . anySequence] )
3439+
3440+ let cbar = try result. target ( for: " cbar " ) . clangTarget ( ) . basicArguments ( isCXX: false )
3441+ XCTAssertMatch ( cbar, [ . anySequence, " -DCCC=2 " , " -I \( A . appending ( components: " Sources " , " cbar " , " Sources " , " headers " ) ) " , " -I \( A . appending ( components: " Sources " , " cbar " , " Sources " , " cppheaders " ) ) " , " -Icfoo " , " -L " , " cbar " , " -Icxxfoo " , " -L " , " cxxbar " , " -fomit-frame-pointer " , . end] )
3442+
3443+ let bar = try result. target ( for: " bar " ) . swiftTarget ( ) . compileArguments ( )
3444+ XCTAssertMatch ( bar, [ . anySequence, " -DLINUX " , " -Isfoo " , " -L " , " sbar " , " -cxx-interoperability-mode=default " , " -enable-upcoming-feature " , " BestFeature " , " -Xcc " , " -fomit-frame-pointer " , . end] )
3445+
3446+ let exe = try result. target ( for: " exe " ) . swiftTarget ( ) . compileArguments ( )
3447+ XCTAssertMatch ( exe, [ . anySequence, " -DFOO " , " -Xcc " , " -fomit-frame-pointer " , . end] )
3448+ }
3449+
3450+ // omit frame pointers explicitly set to false
3451+ do {
3452+ let result = try BuildPlanResult ( plan: BuildPlan (
3453+ buildParameters: mockBuildParameters (
3454+ destinationTriple: . x86_64Linux,
3455+ omitFramePointers: false
3456+ ) ,
3457+ graph: graph,
3458+ fileSystem: fs,
3459+ observabilityScope: observability. topScope
3460+ ) )
3461+
3462+ let dep = try result. target ( for: " t1 " ) . swiftTarget ( ) . compileArguments ( )
3463+ XCTAssertMatch ( dep, [ . anySequence, " -DDEP " , . anySequence] )
3464+
3465+ let cbar = try result. target ( for: " cbar " ) . clangTarget ( ) . basicArguments ( isCXX: false )
3466+ XCTAssertMatch ( cbar, [ . anySequence, " -DCCC=2 " , " -I \( A . appending ( components: " Sources " , " cbar " , " Sources " , " headers " ) ) " , " -I \( A . appending ( components: " Sources " , " cbar " , " Sources " , " cppheaders " ) ) " , " -Icfoo " , " -L " , " cbar " , " -Icxxfoo " , " -L " , " cxxbar " , " -fno-omit-frame-pointer " , . end] )
3467+
3468+ let bar = try result. target ( for: " bar " ) . swiftTarget ( ) . compileArguments ( )
3469+ XCTAssertMatch ( bar, [ . anySequence, " -DLINUX " , " -Isfoo " , " -L " , " sbar " , " -cxx-interoperability-mode=default " , " -enable-upcoming-feature " , " BestFeature " , " -Xcc " , " -fno-omit-frame-pointer " , . end] )
3470+
3471+ let exe = try result. target ( for: " exe " ) . swiftTarget ( ) . compileArguments ( )
3472+ XCTAssertMatch ( exe, [ . anySequence, " -DFOO " , " -Xcc " , " -fno-omit-frame-pointer " , . end] )
3473+ }
3474+
34003475 do {
34013476 let result = try createResult ( for: . macOS)
34023477
0 commit comments