Skip to content

CMake build fails on macOS Sequoia with Xcode 16 release version #76631

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
ADKaster opened this issue Sep 21, 2024 · 19 comments
Open

CMake build fails on macOS Sequoia with Xcode 16 release version #76631

ADKaster opened this issue Sep 21, 2024 · 19 comments
Labels
bug A deviation from expected or documented behavior. Also: expected but undesirable behavior. crash Bug: A crash, i.e., an abnormal termination of software SIL ownership Area → compiler → SIL: SIL ownership

Comments

@ADKaster
Copy link
Contributor

Description

Cloning the repo with Xcode 16 selected and CMake 3.30.3 fails to build using the following steps:

cmake -B build -GNinja
ninja -C build

Xcode Version 16.0 (16A242d)

swift-driver version: 1.115 Apple Swift version 6.0 (swiftlang-6.0.0.9.10 clang-1600.0.26.2)
Target: arm64-apple-macosx15.0

cmake version 3.30.3

ninja version: 1.12.1

The build fails in the same way on both:

main: 47b127f1c98a9f4ff593288c7ee0c6618a912e6b
release/6.0.2: 3755346b1da0f611d3a8bd531831ac48c126b9d4

Expected behavior

Same build as swift build is produced

Actual behavior

Backtrace in the linked gist below

https://gist.github.com/ADKaster/8c62194d219a6f6599c2409d24e304e4

It appears to be a problem with swift-syntax?

1.	Apple Swift version 6.0 (swiftlang-6.0.0.9.10 clang-1600.0.26.2)
2.	Compiling with effective version 5.10
3.	While evaluating request ExecuteSILPipelineRequest(Run pipelines { Non-Diagnostic Mandatory Optimizations, Serialization, Rest of Onone } on SIL for TestingMacros)
4.	While running pass swiftlang/swift-testing#396 SILFunctionTransform "OwnershipModelEliminator" on SILFunction "@$s11SwiftSyntax9TokenKindO2eeoiySbAC_ACtFZ".
 for '==(_:_:)' (in module 'SwiftSyntax')

Steps to reproduce

git clone
cd swift-testing
cmake -B build -GNinja
cmake --build build

swift-testing version/commit hash

47b127f1c98a9f4ff593288c7ee0c6618a912e6b

Swift & OS version (output of swift --version ; uname -a)

swift-driver version: 1.115 Apple Swift version 6.0 (swiftlang-6.0.0.9.10 clang-1600.0.26.2)
Target: arm64-apple-macosx15.0
Darwin Andrews-MacBook-Pro.local 24.0.0 Darwin Kernel Version 24.0.0: Mon Aug 12 20:52:12 PDT 2024; root:xnu-11215.1.10~2/RELEASE_ARM64_T6020 arm64

@ADKaster ADKaster added the bug A deviation from expected or documented behavior. Also: expected but undesirable behavior. label Sep 21, 2024
@ADKaster
Copy link
Contributor Author

Also fails with Xcode 16.1 Beta 2

swift-driver version: 1.115 Apple Swift version 6.0 (swiftlang-6.0.0.9.11 clang-1600.0.26.2)
Target: arm64-apple-macosx15.0

Xcode Version 16.1 beta 2 (16B5014f)

@stmontgomery
Copy link
Contributor

Do you get a different result if you first revert the change in swiftlang/swift-testing#690?

@grynspan
Copy link
Contributor

What's your thinking Stuart?

@ADKaster
Copy link
Contributor Author

ADKaster commented Sep 21, 2024

@stmontgomery Yes, applying this diff on top of 47b127f1c98a9f4ff593288c7ee0c6618a912e6b allows the build to complete

diff --git a/Sources/TestingMacros/CMakeLists.txt b/Sources/TestingMacros/CMakeLists.txt
index c916204..bb55f09 100644
--- a/Sources/TestingMacros/CMakeLists.txt
+++ b/Sources/TestingMacros/CMakeLists.txt
@@ -31,8 +31,8 @@ if(SwiftTesting_BuildMacrosAsExecutables)
   set(FETCHCONTENT_BASE_DIR ${CMAKE_BINARY_DIR}/_d)
   FetchContent_Declare(SwiftSyntax
     GIT_REPOSITORY https://github.com/swiftlang/swift-syntax
-    GIT_TAG cb53fa1bd3219b0b23ded7dfdd3b2baff266fd25) # 600.0.0
-  FetchContent_MakeAvailable(SwiftSyntax)
+    GIT_TAG 27b74edd5de625d0e399869a5af08f1501af8837)
+FetchContent_MakeAvailable(SwiftSyntax)
 endif()

Edit: Double checked, 47b127f1 definitely still fails unaltered, and works with the diff applied when using Xcode 16.1 Beta 2

swift-driver version: 1.115 Apple Swift version 6.0 (swiftlang-6.0.0.9.11 clang-1600.0.26.2)
Target: arm64-apple-macosx15.0

@grynspan
Copy link
Contributor

Sounds like a compiler bug that's conflicting with the 600.0.0 tag. We aren't seeing the compiler issue with the latest main-branch toolchain (our CI is happy.) We should send this over to the Swift repo for triage, I think.

@ChaseKnowlden
Copy link

Failed to build for me as well.

@stmontgomery stmontgomery transferred this issue from swiftlang/swift-testing Sep 21, 2024
@ADKaster
Copy link
Contributor Author

I did see some interesting compiler warnings (visible in my gist in the initial post) about experimental features not being enabled as expected, so it could be some CMake flag trickery with the swift-testing repo and the imported swift-syntax target is causing conflicts that cause an unsupported configuration to be built.

@stmontgomery
Copy link
Contributor

Thanks for those data points @ADKaster! Over to the swift repo to investigate the build failure further.

CC @ahoppen @bnbarham for visibility

@stmontgomery
Copy link
Contributor

I did see some interesting compiler warnings (visible in my gist in the initial post) about experimental features not being enabled as expected

That's interesting to note. Here are those warnings pulled out for convenience:

<unknown>:0: warning: ignoring -experimental-skip-non-inlinable-function-bodies-without-types (overriden by -experimental-allow-non-resilient-access)
<unknown>:0: warning: ignoring -experimental-allow-non-resilient-access (overriden by -compile-module-from-interface or -typecheck-module-from-interface)
<unknown>:0: warning: ignoring -experimental-package-cmo (requires -experimental-allow-non-resilient-access)
<unknown>:0: warning: ignoring -experimental-allow-non-resilient-access (overriden by -compile-module-from-interface or -typecheck-module-from-interface)
<unknown>:0: warning: ignoring -experimental-package-cmo (requires -experimental-allow-non-resilient-access)

@grynspan grynspan added crash Bug: A crash, i.e., an abnormal termination of software SIL ownership Area → compiler → SIL: SIL ownership labels Sep 21, 2024
@rintaro
Copy link
Member

rintaro commented Oct 3, 2024

@stmontgomery
Copy link
Contributor

But swift-testing would need to update the reference here https://github.com/swiftlang/swift-testing/blob/83b0b049d6f73b58e05c0e3f1864c9b1db8b07b0/Sources/TestingMacros/CMakeLists.txt#L34

Thanks @rintaro ! I'll be happy to update that, once your fix lands in a new tag of swift-syntax.

@Bo98
Copy link
Contributor

Bo98 commented Oct 9, 2024

FWIW the same happens in a whole-toolchain build under macOS 15 w/ Xcode 16:

1.	Swift version 6.0.1 (swift-6.0.1-RELEASE)
2.	Compiling with effective version 5.10
3.	While evaluating request IRGenRequest(IR Generation for file "/tmp/swift-20241008-10264-ollfwb/swift-testing/Sources/TestingMacros/SourceLocationMacro.swift")
4.	While emitting IR SIL function "@$s13TestingMacros19SourceLocationMacroV019CompilerSwiftSyntaxB00E0AadEP10formatModeAD06FormatJ0OvgZTW".
  for getter for formatMode (in module 'SwiftSyntaxMacros')
 Stack dump without symbol names (ensure you have llvm-symbolizer in your PATH or set the environment var `LLVM_SYMBOLIZER_PATH` to point to it):
0  swift-frontend           0x0000000103c85f24 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) + 56
1  swift-frontend           0x0000000103c86308 SignalHandler(int) + 188
2  libsystem_platform.dylib 0x000000018758c184 _sigtramp + 56
3  swift-frontend           0x0000000100bd1130 (anonymous namespace)::IRGenSILFunction::visitSILBasicBlock(swift::SILBasicBlock*) + 34860
4  swift-frontend           0x0000000100bc7bac swift::irgen::IRGenModule::emitSILFunction(swift::SILFunction*) + 7312
5  swift-frontend           0x0000000100ada020 swift::irgen::IRGenerator::emitLazyDefinitions() + 1292
6  swift-frontend           0x0000000100b8bdc4 swift::IRGenRequest::evaluate(swift::Evaluator&, swift::IRGenDescriptor) const + 2308
7  swift-frontend           0x0000000100bc5d10 swift::GeneratedModule swift::SimpleRequest<swift::IRGenRequest, swift::GeneratedModule (swift::IRGenDescriptor), (swift::RequestFlags)9>::callDerived<0ul>(swift::Evaluator&, std::__1::integer_sequence<unsigned long, 0ul>) const + 140
8  swift-frontend           0x0000000100b917a4 swift::IRGenRequest::OutputType swift::Evaluator::getResultUncached<swift::IRGenRequest, swift::IRGenRequest::OutputType swift::evaluateOrFatal<swift::IRGenRequest>(swift::Evaluator&, swift::IRGenRequest)::'lambda'()>(swift::IRGenRequest const&, swift::IRGenRequest::OutputType swift::evaluateOrFatal<swift::IRGenRequest>(swift::Evaluator&, swift::IRGenRequest)::'lambda'()) + 176
9  swift-frontend           0x0000000100b8d638 swift::performIRGeneration(swift::FileUnit*, swift::IRGenOptions const&, swift::TBDGenOptions const&, std::__1::unique_ptr<swift::SILModule, std::__1::default_delete<swift::SILModule>>, llvm::StringRef, swift::PrimarySpecificPaths const&, llvm::StringRef, llvm::GlobalVariable**) + 300
10 swift-frontend           0x0000000100898290 generateIR(swift::IRGenOptions const&, swift::TBDGenOptions const&, std::__1::unique_ptr<swift::SILModule, std::__1::default_delete<swift::SILModule>>, swift::PrimarySpecificPaths const&, llvm::StringRef, llvm::PointerUnion<swift::ModuleDecl*, swift::SourceFile*>, llvm::GlobalVariable*&, llvm::ArrayRef<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>>) + 156
11 swift-frontend           0x0000000100895984 performCompileStepsPostSILGen(swift::CompilerInstance&, std::__1::unique_ptr<swift::SILModule, std::__1::default_delete<swift::SILModule>>, llvm::PointerUnion<swift::ModuleDecl*, swift::SourceFile*>, swift::PrimarySpecificPaths const&, int&, swift::FrontendObserver*) + 1228
12 swift-frontend           0x0000000100894f24 swift::performCompileStepsPostSema(swift::CompilerInstance&, int&, swift::FrontendObserver*) + 400
13 swift-frontend           0x000000010089f1b0 withSemanticAnalysis(swift::CompilerInstance&, swift::FrontendObserver*, llvm::function_ref<bool (swift::CompilerInstance&)>, bool) + 140
14 swift-frontend           0x00000001008967e0 performCompile(swift::CompilerInstance&, int&, swift::FrontendObserver*) + 532
15 swift-frontend           0x0000000100896130 swift::performFrontend(llvm::ArrayRef<char const*>, char const*, void*, swift::FrontendObserver*) + 1792
16 swift-frontend           0x00000001006f3f70 swift::mainEntry(int, char const**) + 3640
17 dyld                     0x00000001871d4274 start + 2840

1.	Swift version 6.0.1 (swift-6.0.1-RELEASE)
2.	Compiling with effective version 5.10
3.	While evaluating request ExecuteSILPipelineRequest(Run pipelines { PrepareOptimizationPasses, EarlyModulePasses, HighLevel,Function+EarlyLoopOpt, HighLevel,Module+StackPromote, MidLevel,Function, ClosureSpecialize, LowLevel,Function, LateLoopOpt, SIL Debug Info Generator } on SIL for TestingMacros)
4.	While running pass #1341 SILFunctionTransform "TempRValueOpt" on SILFunction "@$s13TestingMacros20_sourceLocationLabel33_BC3BD4BACDE22A1C6B69705698FFB7E8LL19CompilerSwiftSyntax05TokenP0Vvg".
 for getter for _sourceLocationLabel (at /tmp/swift-20241008-10264-ollfwb/swift-testing/Sources/TestingMacros/ConditionMacro.swift:46:13)
Stack dump without symbol names (ensure you have llvm-symbolizer in your PATH or set the environment var `LLVM_SYMBOLIZER_PATH` to point to it):
0  swift-frontend           0x00000001059e1f24 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) + 56
1  swift-frontend           0x00000001059e2308 SignalHandler(int) + 188
2  libsystem_platform.dylib 0x000000018758c184 _sigtramp + 56
3  swift-frontend           0x00000001029595e4 swift::SILBuilder::emitDestroyValueOperation(swift::SILLocation, swift::SILValue) + 112
4  swift-frontend           0x0000000102c42f80 (anonymous namespace)::TempRValueOptPass::run() + 844
5  swift-frontend           0x0000000102baebf8 swift::SILPassManager::runPassOnFunction(unsigned int, swift::SILFunction*) + 1112
6  swift-frontend           0x0000000102baf624 swift::SILPassManager::runFunctionPasses(unsigned int, unsigned int) + 656
7  swift-frontend           0x0000000102bad904 swift::SILPassManager::executePassPipelinePlan(swift::SILPassPipelinePlan const&) + 200
8  swift-frontend           0x0000000102bad820 swift::ExecuteSILPipelineRequest::evaluate(swift::Evaluator&, swift::SILPipelineExecutionDescriptor) const + 52
9  swift-frontend           0x0000000102bcfb14 swift::SimpleRequest<swift::ExecuteSILPipelineRequest, std::__1::tuple<> (swift::SILPipelineExecutionDescriptor), (swift::RequestFlags)1>::evaluateRequest(swift::ExecuteSILPipelineRequest const&, swift::Evaluator&) + 28
10 swift-frontend           0x0000000102bbb890 swift::ExecuteSILPipelineRequest::OutputType swift::Evaluator::getResultUncached<swift::ExecuteSILPipelineRequest, swift::ExecuteSILPipelineRequest::OutputType swift::evaluateOrFatal<swift::ExecuteSILPipelineRequest>(swift::Evaluator&, swift::ExecuteSILPipelineRequest)::'lambda'()>(swift::ExecuteSILPipelineRequest const&, swift::ExecuteSILPipelineRequest::OutputType swift::evaluateOrFatal<swift::ExecuteSILPipelineRequest>(swift::Evaluator&, swift::ExecuteSILPipelineRequest)::'lambda'()) + 168
11 swift-frontend           0x0000000102bad968 swift::executePassPipelinePlan(swift::SILModule*, swift::SILPassPipelinePlan const&, bool, swift::irgen::IRGenModule*) + 64
12 swift-frontend           0x0000000102bbc960 swift::runSILOptimizationPasses(swift::SILModule&) + 132
13 swift-frontend           0x0000000102759400 swift::CompilerInstance::performSILProcessing(swift::SILModule*) + 628
14 swift-frontend           0x00000001025f1754 performCompileStepsPostSILGen(swift::CompilerInstance&, std::__1::unique_ptr<swift::SILModule, std::__1::default_delete<swift::SILModule>>, llvm::PointerUnion<swift::ModuleDecl*, swift::SourceFile*>, swift::PrimarySpecificPaths const&, int&, swift::FrontendObserver*) + 668
15 swift-frontend           0x00000001025f0f24 swift::performCompileStepsPostSema(swift::CompilerInstance&, int&, swift::FrontendObserver*) + 400
16 swift-frontend           0x00000001025fb1b0 withSemanticAnalysis(swift::CompilerInstance&, swift::FrontendObserver*, llvm::function_ref<bool (swift::CompilerInstance&)>, bool) + 140
17 swift-frontend           0x00000001025f27e0 performCompile(swift::CompilerInstance&, int&, swift::FrontendObserver*) + 532
18 swift-frontend           0x00000001025f2130 swift::performFrontend(llvm::ArrayRef<char const*>, char const*, void*, swift::FrontendObserver*) + 1792
19 swift-frontend           0x000000010244ff70 swift::mainEntry(int, char const**) + 3640
20 dyld                     0x00000001871d4274 start + 2840

and AFAICT SWIFTSYNTAX_EMIT_MODULE is staying for toolchain builds so there's still some underlying issue.

@rintaro
Copy link
Member

rintaro commented Oct 9, 2024

@Bo98 would you let know know your environment ?

  • What the exact version of Xcode/toolchain are you using for building the toolchain?
  • What branch/commit of swift repo?
  • What command line build-script invocation?

@Bo98
Copy link
Contributor

Bo98 commented Oct 10, 2024

  • What the exact version of Xcode/toolchain are you using for building the toolchain?

Swift 6.0 (swiftlang-6.0.0.9.10 clang-1600.0.26.2), from Xcode 16.0

What branch/commit of swift repo?

swift-6.0.1-RELEASE

  • What command line build-script invocation?

I've slimmed it down a bit to:

utils/build-script \
--release \
--skip-build-benchmarks \
--swift-include-tests=0 \
--llvm-include-tests=0 \
--build-swift-private-stdlib=0 \
--swift-darwin-supported-archs="$(uname -m)" \
--install-destdir=/tmp/swifttest \
--install-swift \
--install-llvm \
--swift-testing-macros

@rintaro
Copy link
Member

rintaro commented Oct 14, 2024

@Bo98 thank you for the info!

The crash happens when

  • swift-syntax is built with package CMO enabled
  • The client module (TestingMacros in this case) is not in the same -pacakge-name
  • swift-syntax's serialized .swiftmodule are visible from the client module
  • The compiler building swift-syntax (swiftlang-6.0.0.9.10) and the compiler building the client module (swift-6.0.1-RELEASE) use exactly the same module format

Building swift-6.0.1-RELEASE with Swift 6.0 in Xcode 16.0 meets these conditions. So the failure is expected unfortunately.

In short, package CMO enabled serialized .swiftmodule are not usable from outside the package. And yes, we should consider it'a compiler bug. The compiler should fallback to the resilient .swiftinterface in such cases.

@Bo98
Copy link
Contributor

Bo98 commented Oct 25, 2024

Would I be correct in assuming this is tracked as rdar://134584629 (as indicated from #76338)?

@rintaro
Copy link
Member

rintaro commented Oct 25, 2024

Apparently we have made .swiftmodule usable from outside. #76729
cc: @elsh

@Bo98
Copy link
Contributor

Bo98 commented Oct 26, 2024

Good spot! Cherry-picking that onto 6.0.1 does indeed fix the build.

@stmontgomery
Copy link
Contributor

But swift-testing would need to update the reference here https://github.com/swiftlang/swift-testing/blob/83b0b049d6f73b58e05c0e3f1864c9b1db8b07b0/Sources/TestingMacros/CMakeLists.txt#L34

Thanks @rintaro ! I'll be happy to update that, once your fix lands in a new tag of swift-syntax.

@rintaro @bnbarham Can we get this fix cherry-picked to a 6.0.x release branch, so we can reference that newer tag from swift-testing's CMake rules?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug A deviation from expected or documented behavior. Also: expected but undesirable behavior. crash Bug: A crash, i.e., an abnormal termination of software SIL ownership Area → compiler → SIL: SIL ownership
Projects
None yet
Development

Successfully merging a pull request may close this issue.

6 participants