Frontend crash when C++ library exports type String

When investigating allowing my template library to be imported by swift, I encountered a bug where using the un-namespaced name String causes a frontend crash in IR generation.

I was unable to reduce the issue to a minimal library that only exports a type with the name String, but I know for certain that my library does this (as well as a type named Optional ..). Here's an attempt, but it doesn't crash: GitHub - ADKaster/swift-string-name-conflict: issue reproduction repository

The project issue is here: Swift: Using un-namespaced 'String' type after importing AK crashes swift frontend · Issue #1102 · LadybirdBrowser/ladybird · GitHub

The gist is like so:

import AK

func f(_ x: String) {} // crash
func g(_ x: Swift.String) {} // ok
func h(_ x: AK.String) {} // ok

To reproduce:

  • clone ladybird
  • replace the contents of Tests/AK/TestAKBindings.swift with the above
  • cmake --preset default -DENABLE_SWIFT=ON
  • ninja -C Build/ladybird TestAKBindings

Can anyone help me reduce this to less than my entire library?


The backtrace looks like so:

macOS: Xcode 16 Beta 5

[27/31] Building Swift Module 'TestAKBindings' with 1 source
FAILED: Lagom/Tests/AK/CMakeFiles/TestAKBindings.dir/TestAKBindings.swift.o 
/Applications/Xcode-beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swiftc -target arm64-apple-macosx14.6 -j 12 -num-threads 12 -c -DENABLE_COMPILETIME_FORMAT_CHECK -module-name TestAKBindings -O -g -sdk /Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.0.sdk -incremental -color-diagnostics -Xcc -std=c++23 -cxx-interoperability-mode=default -Xcc -Wall -Xcc -Wextra -Xcc -fno-exceptions -Xcc -ffp-contract=off -Xcc -Wcast-qual -Xcc -Wformat=2 -Xcc -Wimplicit-fallthrough -Xcc -Wmissing-declarations -Xcc -Wsuggest-override -Xcc -Wno-invalid-offsetof -Xcc -Wno-unknown-warning-option -Xcc -Wno-unused-command-line-argument -Xcc -Werror -Xcc -fconstexpr-steps=16777216 -Xcc -Wmissing-prototypes -Xcc -Wno-implicit-const-int-float-conversion -Xcc -Wno-user-defined-literals -Xcc -Wno-vla-cxx-extension -Xcc -Wno-unqualified-std-cast-call -Xcc -fstack-protector-strong -Xcc -fstrict-flex-arrays=2 -Xcc -Wno-maybe-uninitialized -Xcc -Wno-shorten-64-to-32 -Xcc -fsigned-char -Xcc -ggnu-pubnames -Xcc -fPIC -Xcc -O2 -Xcc -g1 -Xcc -Wno-overloaded-virtual -Xcc -Wno-unused-private-field -parse-as-library -Xcc -ivfsoverlay/Users/andrew/Source/ladybird-browser/Build/ladybird/Lagom/AK/vfs_overlay.yaml -output-file-map Lagom/Tests/AK/CMakeFiles/TestAKBindings.dir/RelWithDebInfo/output-file-map.json -I /Users/andrew/Source/ladybird-browser -I /Users/andrew/Source/ladybird-browser/Userland/Services -I /Users/andrew/Source/ladybird-browser/Userland/Libraries -I /Users/andrew/Source/ladybird-browser/Build/ladybird/Lagom -I /Users/andrew/Source/ladybird-browser/Build/ladybird/Lagom/Userland/Services -I /Users/andrew/Source/ladybird-browser/Build/ladybird/Lagom/Userland/Libraries -I /Applications/Xcode-beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I /Users/andrew/Source/ladybird-browser/Meta/Lagom/../.. -I /Users/andrew/Source/ladybird-browser/Meta/Lagom/../../Userland -I /Users/andrew/Source/ladybird-browser/Meta/Lagom/../../Userland/Libraries -I /Users/andrew/Source/ladybird-browser/Meta/Lagom/../../Userland/Services -I /Users/andrew/Source/ladybird-browser/Build/ladybird /Users/andrew/Source/ladybird-browser/Tests/AK/TestAKBindings.swift
error: compile command failed due to signal 11 (use -v to see invocation)
Please submit a bug report (https://swift.org/contributing/#reporting-bugs) and include the crash backtrace.
Stack dump:
0.	Program arguments: /Applications/Xcode-beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift-frontend -frontend -c -primary-file /Users/andrew/Source/ladybird-browser/Tests/AK/TestAKBindings.swift -emit-reference-dependencies-path Lagom/Tests/AK/CMakeFiles/TestAKBindings.dir/TestAKBindings.swift.o.swiftdeps -target arm64-apple-macosx14.6 -Xllvm -aarch64-use-tbi -enable-objc-interop -stack-check -cxx-interoperability-mode=default -sdk /Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.0.sdk -I /Users/andrew/Source/ladybird-browser -I /Users/andrew/Source/ladybird-browser/Userland/Services -I /Users/andrew/Source/ladybird-browser/Userland/Libraries -I /Users/andrew/Source/ladybird-browser/Build/ladybird/Lagom -I /Users/andrew/Source/ladybird-browser/Build/ladybird/Lagom/Userland/Services -I /Users/andrew/Source/ladybird-browser/Build/ladybird/Lagom/Userland/Libraries -I /Applications/Xcode-beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I /Users/andrew/Source/ladybird-browser -I /Users/andrew/Source/ladybird-browser/Userland -I /Users/andrew/Source/ladybird-browser/Userland/Libraries -I /Users/andrew/Source/ladybird-browser/Userland/Services -I /Users/andrew/Source/ladybird-browser/Build/ladybird -color-diagnostics -g -debug-info-format=dwarf -dwarf-version=4 -O -D ENABLE_COMPILETIME_FORMAT_CHECK -new-driver-path /Applications/Xcode-beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift-driver -empty-abi-descriptor -resource-dir /Applications/Xcode-beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift -file-compilation-dir /Users/andrew/Source/ladybird-browser/Build/ladybird -Xcc -std=c++23 -Xcc -Wall -Xcc -Wextra -Xcc -fno-exceptions -Xcc -ffp-contract=off -Xcc -Wcast-qual -Xcc -Wformat=2 -Xcc -Wimplicit-fallthrough -Xcc -Wmissing-declarations -Xcc -Wsuggest-override -Xcc -Wno-invalid-offsetof -Xcc -Wno-unknown-warning-option -Xcc -Wno-unused-command-line-argument -Xcc -Werror -Xcc -fconstexpr-steps=16777216 -Xcc -Wmissing-prototypes -Xcc -Wno-implicit-const-int-float-conversion -Xcc -Wno-user-defined-literals -Xcc -Wno-vla-cxx-extension -Xcc -Wno-unqualified-std-cast-call -Xcc -fstack-protector-strong -Xcc -fstrict-flex-arrays=2 -Xcc -Wno-maybe-uninitialized -Xcc -Wno-shorten-64-to-32 -Xcc -fsigned-char -Xcc -ggnu-pubnames -Xcc -fPIC -Xcc -O2 -Xcc -g1 -Xcc -Wno-overloaded-virtual -Xcc -Wno-unused-private-field -Xcc -ivfsoverlay/Users/andrew/Source/ladybird-browser/Build/ladybird/Lagom/AK/vfs_overlay.yaml -module-name TestAKBindings -disable-clang-spi -target-sdk-version 15.0 -target-sdk-name macosx15.0 -external-plugin-path /Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/usr/lib/swift/host/plugins#/Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/usr/bin/swift-plugin-server -external-plugin-path /Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/usr/local/lib/swift/host/plugins#/Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/usr/bin/swift-plugin-server -plugin-path /Applications/Xcode-beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/host/plugins -plugin-path /Applications/Xcode-beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/local/lib/swift/host/plugins -enable-default-cmo -parse-as-library -num-threads 12 -o Lagom/Tests/AK/CMakeFiles/TestAKBindings.dir/TestAKBindings.swift.o
1.	Apple Swift version 6.0 (swiftlang-6.0.0.7.6 clang-1600.0.24.1)
2.	Compiling with effective version 5.10
3.	While evaluating request IRGenRequest(IR Generation for file "/Users/andrew/Source/ladybird-browser/Tests/AK/TestAKBindings.swift")
4.	While emitting IR SIL function "@$s14TestAKBindings1fyySo2AKO6StringVF".
 for 'f(_:)' (at /Users/andrew/Source/ladybird-browser/Tests/AK/TestAKBindings.swift:9:1)
5.	While mangling type for debugger type 'String'
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           0x0000000107e79194 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) + 56
1  swift-frontend           0x0000000107e773e8 llvm::sys::RunSignalHandlers() + 112
2  swift-frontend           0x0000000107e79760 SignalHandler(int) + 292
3  libsystem_platform.dylib 0x00000001944de584 _sigtramp + 56
4  swift-frontend           0x0000000103efeae8 swift::Mangle::ASTMangler::appendAnyGenericType(swift::GenericTypeDecl const*, swift::Mangle::ASTMangler::BaseEntitySignature&) + 1884
5  swift-frontend           0x0000000103ef0a20 swift::Mangle::ASTMangler::appendAnyGenericType(swift::GenericTypeDecl const*) + 60
6  swift-frontend           0x0000000103ef2fcc swift::Mangle::ASTMangler::appendType(swift::Type, swift::GenericSignature, swift::ValueDecl const*) + 3276
7  swift-frontend           0x0000000103ef61d8 swift::Mangle::ASTMangler::mangleTypeForDebugger(swift::Type, swift::GenericSignature) + 496
8  swift-frontend           0x0000000102e32bf0 (anonymous namespace)::IRGenDebugInfoImpl::getOrCreateType(swift::irgen::DebugTypeInfo) + 988
9  swift-frontend           0x0000000102e2d228 (anonymous namespace)::IRGenDebugInfoImpl::emitVariableDeclaration(swift::irgen::IRBuilder&, llvm::ArrayRef<llvm::Value*>, swift::irgen::DebugTypeInfo, swift::SILDebugScope const*, std::__1::optional<swift::SILLocation>, swift::SILDebugVariable, swift::irgen::IndirectionKind, swift::irgen::ArtificialKind, swift::irgen::AddrDbgInstrKind) + 400
10 swift-frontend           0x0000000102e2d068 swift::irgen::IRGenDebugInfo::emitVariableDeclaration(swift::irgen::IRBuilder&, llvm::ArrayRef<llvm::Value*>, swift::irgen::DebugTypeInfo, swift::SILDebugScope const*, std::__1::optional<swift::SILLocation>, swift::SILDebugVariable, swift::irgen::IndirectionKind, swift::irgen::ArtificialKind, swift::irgen::AddrDbgInstrKind) + 268
11 swift-frontend           0x0000000102e8bb40 (anonymous namespace)::IRGenSILFunction::visitSILBasicBlock(swift::SILBasicBlock*) + 136960
12 swift-frontend           0x0000000102e69124 (anonymous namespace)::IRGenSILFunction::emitSILFunction() + 13220
13 swift-frontend           0x0000000102e658dc swift::irgen::IRGenModule::emitSILFunction(swift::SILFunction*) + 2088
14 swift-frontend           0x0000000102cb18b4 swift::irgen::IRGenerator::emitGlobalTopLevel(std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>>> const&) + 3364
15 swift-frontend           0x0000000102e1d118 swift::IRGenRequest::evaluate(swift::Evaluator&, swift::IRGenDescriptor) const + 4700
16 swift-frontend           0x0000000102e64e28 swift::SimpleRequest<swift::IRGenRequest, swift::GeneratedModule (swift::IRGenDescriptor), (swift::RequestFlags)9>::evaluateRequest(swift::IRGenRequest const&, swift::Evaluator&) + 176
17 swift-frontend           0x0000000102e26010 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'()) + 784
18 swift-frontend           0x0000000102e1fa48 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**) + 180
19 swift-frontend           0x0000000102830d5c 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
20 swift-frontend           0x000000010282c588 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*) + 2176
21 swift-frontend           0x000000010282b474 swift::performCompileStepsPostSema(swift::CompilerInstance&, int&, swift::FrontendObserver*) + 984
22 swift-frontend           0x000000010282e728 performCompile(swift::CompilerInstance&, int&, swift::FrontendObserver*) + 1680
23 swift-frontend           0x000000010282d458 swift::performFrontend(llvm::ArrayRef<char const*>, char const*, void*, swift::FrontendObserver*) + 3572
24 swift-frontend           0x00000001027b450c swift::mainEntry(int, char const**) + 3680
25 dyld                     0x0000000194123154 start + 2476

Linux, Ubuntu 22.04 with llvm assertions disabled:

[1/2] Building Swift object Lagom/Tests/AK/CMakeFiles/TestAKBindings.dir/TestAKBindings.swift.o
FAILED: Lagom/Tests/AK/CMakeFiles/TestAKBindings.dir/TestAKBindings.swift.o 
/home/andrew/swift/build/buildbot_linux/none-swift_package_sandbox_linux-x86_64/usr/bin/swiftc -j 32 -num-threads 32 -c -DENABLE_COMPILETIME_FORMAT_CHECK -D_FILE_OFFSET_BITS=64 -module-name TestAKBindings -O -g -incremental -Xcc -std=c++23 -cxx-interoperability-mode=default -Xcc -Wall -Xcc -Wextra -Xcc -fno-exceptions -Xcc -ffp-contract=off -Xcc -Wcast-qual -Xcc -Wformat=2 -Xcc -Wimplicit-fallthrough -Xcc -Wmissing-declarations -Xcc -Wsuggest-override -Xcc -Wno-invalid-offsetof -Xcc -Wno-unknown-warning-option -Xcc -Wno-unused-command-line-argument -Xcc -Werror -Xcc -fconstexpr-steps=16777216 -Xcc -Wmissing-prototypes -Xcc -Wno-implicit-const-int-float-conversion -Xcc -Wno-user-defined-literals -Xcc -Wno-vla-cxx-extension -Xcc -Wno-unqualified-std-cast-call -Xcc -fno-semantic-interposition -Xcc -fvisibility-inlines-hidden -Xcc -fstack-protector-strong -Xcc -fstrict-flex-arrays=2 -Xcc -Wno-maybe-uninitialized -Xcc -Wno-shorten-64-to-32 -Xcc -fsigned-char -Xcc -ggnu-pubnames -Xcc -fPIC -Xcc -O2 -Xcc -g1 -Xcc -Wno-overloaded-virtual -Xcc -Wno-unused-private-field -parse-as-library -Xcc -ivfsoverlay/home/andrew/ladybird-org/ladybird-browser/Build/ladybird/Lagom/AK/vfs_overlay.yaml -output-file-map Lagom/Tests/AK/CMakeFiles/TestAKBindings.dir/RelWithDebInfo/output-file-map.json -I /home/andrew/ladybird-org/ladybird-browser -I /home/andrew/ladybird-org/ladybird-browser/Userland/Services -I /home/andrew/ladybird-org/ladybird-browser/Userland/Libraries -I /home/andrew/ladybird-org/ladybird-browser/Build/ladybird/Lagom -I /home/andrew/ladybird-org/ladybird-browser/Build/ladybird/Lagom/Userland/Services -I /home/andrew/ladybird-org/ladybird-browser/Build/ladybird/Lagom/Userland/Libraries -I /home/andrew/swift/build/buildbot_linux/none-swift_package_sandbox_linux-x86_64/usr/include -I /home/andrew/ladybird-org/ladybird-browser/Meta/Lagom/../.. -I /home/andrew/ladybird-org/ladybird-browser/Meta/Lagom/../../Userland -I /home/andrew/ladybird-org/ladybird-browser/Meta/Lagom/../../Userland/Libraries -I /home/andrew/ladybird-org/ladybird-browser/Meta/Lagom/../../Userland/Services -I /home/andrew/ladybird-org/ladybird-browser/Build/ladybird /home/andrew/ladybird-org/ladybird-browser/Tests/AK/TestAKBindings.swift
warning: conditional compilation flags do not have values in Swift; they are either present or absent (rather than '_FILE_OFFSET_BITS=64')
error: compile command failed due to signal 11 (use -v to see invocation)
Please submit a bug report (https://swift.org/contributing/#reporting-bugs) and include the crash backtrace.
Stack dump:
0.	Program arguments: /home/andrew/swift/build/buildbot_linux/none-swift_package_sandbox_linux-x86_64/usr/bin/swift-frontend -frontend -c -primary-file /home/andrew/ladybird-org/ladybird-browser/Tests/AK/TestAKBindings.swift -emit-reference-dependencies-path /home/andrew/ladybird-org/ladybird-browser/Build/ladybird/Lagom/Tests/AK/CMakeFiles/TestAKBindings.dir/TestAKBindings.swift.o.swiftdeps -target x86_64-unknown-linux-gnu -disable-objc-interop -cxx-interoperability-mode=default -I /home/andrew/ladybird-org/ladybird-browser -I /home/andrew/ladybird-org/ladybird-browser/Userland/Services -I /home/andrew/ladybird-org/ladybird-browser/Userland/Libraries -I /home/andrew/ladybird-org/ladybird-browser/Build/ladybird/Lagom -I /home/andrew/ladybird-org/ladybird-browser/Build/ladybird/Lagom/Userland/Services -I /home/andrew/ladybird-org/ladybird-browser/Build/ladybird/Lagom/Userland/Libraries -I /home/andrew/swift/build/buildbot_linux/none-swift_package_sandbox_linux-x86_64/usr/include -I /home/andrew/ladybird-org/ladybird-browser -I /home/andrew/ladybird-org/ladybird-browser/Userland -I /home/andrew/ladybird-org/ladybird-browser/Userland/Libraries -I /home/andrew/ladybird-org/ladybird-browser/Userland/Services -I /home/andrew/ladybird-org/ladybird-browser/Build/ladybird -g -debug-info-format=dwarf -dwarf-version=4 -O -D ENABLE_COMPILETIME_FORMAT_CHECK -D _FILE_OFFSET_BITS=64 -empty-abi-descriptor -Xcc -working-directory -Xcc /home/andrew/ladybird-org/ladybird-browser/Build/ladybird -resource-dir /home/andrew/swift/build/buildbot_linux/none-swift_package_sandbox_linux-x86_64/usr/lib/swift -file-compilation-dir /home/andrew/ladybird-org/ladybird-browser/Build/ladybird -Xcc -std=c++23 -Xcc -Wall -Xcc -Wextra -Xcc -fno-exceptions -Xcc -ffp-contract=off -Xcc -Wcast-qual -Xcc -Wformat=2 -Xcc -Wimplicit-fallthrough -Xcc -Wmissing-declarations -Xcc -Wsuggest-override -Xcc -Wno-invalid-offsetof -Xcc -Wno-unknown-warning-option -Xcc -Wno-unused-command-line-argument -Xcc -Werror -Xcc -fconstexpr-steps=16777216 -Xcc -Wmissing-prototypes -Xcc -Wno-implicit-const-int-float-conversion -Xcc -Wno-user-defined-literals -Xcc -Wno-vla-cxx-extension -Xcc -Wno-unqualified-std-cast-call -Xcc -fno-semantic-interposition -Xcc -fvisibility-inlines-hidden -Xcc -fstack-protector-strong -Xcc -fstrict-flex-arrays=2 -Xcc -Wno-maybe-uninitialized -Xcc -Wno-shorten-64-to-32 -Xcc -fsigned-char -Xcc -ggnu-pubnames -Xcc -fPIC -Xcc -O2 -Xcc -g1 -Xcc -Wno-overloaded-virtual -Xcc -Wno-unused-private-field -Xcc -ivfsoverlay/home/andrew/ladybird-org/ladybird-browser/Build/ladybird/Lagom/AK/vfs_overlay.yaml -module-name TestAKBindings -in-process-plugin-server-path /home/andrew/swift/build/buildbot_linux/none-swift_package_sandbox_linux-x86_64/usr/lib/swift/host/libSwiftInProcPluginServer.so -plugin-path /home/andrew/swift/build/buildbot_linux/none-swift_package_sandbox_linux-x86_64/usr/lib/swift/host/plugins -plugin-path /home/andrew/swift/build/buildbot_linux/none-swift_package_sandbox_linux-x86_64/usr/local/lib/swift/host/plugins -enable-default-cmo -parse-as-library -num-threads 32 -o /home/andrew/ladybird-org/ladybird-browser/Build/ladybird/Lagom/Tests/AK/CMakeFiles/TestAKBindings.dir/TestAKBindings.swift.o
1.	Swift version 6.0-dev (LLVM 3427f33b53c666b, Swift 225809e3f8e9c7b)
2.	Compiling with effective version 5.10
3.	While evaluating request IRGenRequest(IR Generation for file "/home/andrew/ladybird-org/ladybird-browser/Tests/AK/TestAKBindings.swift")
4.	While emitting IR SIL function "@$s14TestAKBindings1fyySo2AKO6StringVF".
 for 'f(_:)' (at /home/andrew/ladybird-org/ladybird-browser/Tests/AK/TestAKBindings.swift:9:1)
5.	While mangling type for debugger type 'String'
 #0 0x0000648010fcde58 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/home/andrew/swift/build/buildbot_linux/none-swift_package_sandbox_linux-x86_64/usr/bin/swift-frontend+0x656ae58)
 #1 0x0000648010fcbe1e llvm::sys::RunSignalHandlers() (/home/andrew/swift/build/buildbot_linux/none-swift_package_sandbox_linux-x86_64/usr/bin/swift-frontend+0x6568e1e)
 #2 0x0000648010fce4c8 SignalHandler(int) Signals.cpp:0:0
 #3 0x000079d5b3042520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
 #4 0x000064800caf3618 swift::Mangle::ASTMangler::appendAnyGenericType(swift::GenericTypeDecl const*, swift::Mangle::ASTMangler::BaseEntitySignature&) (/home/andrew/swift/build/buildbot_linux/none-swift_package_sandbox_linux-x86_64/usr/bin/swift-frontend+0x2090618)
 #5 0x000064800caeab58 swift::Mangle::ASTMangler::appendType(swift::Type, swift::GenericSignature, swift::ValueDecl const*) (/home/andrew/swift/build/buildbot_linux/none-swift_package_sandbox_linux-x86_64/usr/bin/swift-frontend+0x2087b58)
 #6 0x000064800caecf7f swift::Mangle::ASTMangler::mangleTypeForDebugger[abi:cxx11](swift::Type, swift::GenericSignature) (/home/andrew/swift/build/buildbot_linux/none-swift_package_sandbox_linux-x86_64/usr/bin/swift-frontend+0x2089f7f)
 #7 0x000064800ba68a4e (anonymous namespace)::IRGenDebugInfoImpl::getOrCreateType(swift::irgen::DebugTypeInfo) IRGenDebugInfo.cpp:0:0
 #8 0x000064800ba639a9 (anonymous namespace)::IRGenDebugInfoImpl::emitVariableDeclaration(swift::irgen::IRBuilder&, llvm::ArrayRef<llvm::Value*>, swift::irgen::DebugTypeInfo, swift::SILDebugScope const*, std::optional<swift::SILLocation>, swift::SILDebugVariable, swift::irgen::IndirectionKind, swift::irgen::ArtificialKind, swift::irgen::AddrDbgInstrKind) IRGenDebugInfo.cpp:0:0
 #9 0x000064800ba63706 swift::irgen::IRGenDebugInfo::emitVariableDeclaration(swift::irgen::IRBuilder&, llvm::ArrayRef<llvm::Value*>, swift::irgen::DebugTypeInfo, swift::SILDebugScope const*, std::optional<swift::SILLocation>, swift::SILDebugVariable, swift::irgen::IndirectionKind, swift::irgen::ArtificialKind, swift::irgen::AddrDbgInstrKind) (/home/andrew/swift/build/buildbot_linux/none-swift_package_sandbox_linux-x86_64/usr/bin/swift-frontend+0x1000706)
#10 0x000064800ba9bdd5 (anonymous namespace)::IRGenSILFunction::visitSILBasicBlock(swift::SILBasicBlock*) IRGenSIL.cpp:0:0
#11 0x000064800ba7ba8a swift::irgen::IRGenModule::emitSILFunction(swift::SILFunction*) (/home/andrew/swift/build/buildbot_linux/none-swift_package_sandbox_linux-x86_64/usr/bin/swift-frontend+0x1018a8a)
#12 0x000064800b9543d6 swift::irgen::IRGenerator::emitGlobalTopLevel(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>> const&) (/home/andrew/swift/build/buildbot_linux/none-swift_package_sandbox_linux-x86_64/usr/bin/swift-frontend+0xef13d6)
#13 0x000064800b81a9ec swift::IRGenRequest::evaluate(swift::Evaluator&, swift::IRGenDescriptor) const (/home/andrew/swift/build/buildbot_linux/none-swift_package_sandbox_linux-x86_64/usr/bin/swift-frontend+0xdb79ec)
#14 0x000064800b871bfc swift::GeneratedModule swift::SimpleRequest<swift::IRGenRequest, swift::GeneratedModule (swift::IRGenDescriptor), (swift::RequestFlags)17>::callDerived<0ul>(swift::Evaluator&, std::integer_sequence<unsigned long, 0ul>) const crtstuff.c:0:0
#15 0x000064800b871b59 swift::SimpleRequest<swift::IRGenRequest, swift::GeneratedModule (swift::IRGenDescriptor), (swift::RequestFlags)17>::evaluateRequest(swift::IRGenRequest const&, swift::Evaluator&) crtstuff.c:0:0
#16 0x000064800b823d37 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'()) crtstuff.c:0:0
#17 0x000064800b81cd4e swift::performIRGeneration(swift::FileUnit*, swift::IRGenOptions const&, swift::TBDGenOptions const&, std::unique_ptr<swift::SILModule, std::default_delete<swift::SILModule>>, llvm::StringRef, swift::PrimarySpecificPaths const&, llvm::StringRef, llvm::GlobalVariable**) (/home/andrew/swift/build/buildbot_linux/none-swift_package_sandbox_linux-x86_64/usr/bin/swift-frontend+0xdb9d4e)
#18 0x000064800b472cff generateIR(swift::IRGenOptions const&, swift::TBDGenOptions const&, std::unique_ptr<swift::SILModule, std::default_delete<swift::SILModule>>, swift::PrimarySpecificPaths const&, llvm::StringRef, llvm::PointerUnion<swift::ModuleDecl*, swift::SourceFile*>, llvm::GlobalVariable*&, llvm::ArrayRef<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>) FrontendTool.cpp:0:0
#19 0x000064800b46e8e5 performCompileStepsPostSILGen(swift::CompilerInstance&, std::unique_ptr<swift::SILModule, std::default_delete<swift::SILModule>>, llvm::PointerUnion<swift::ModuleDecl*, swift::SourceFile*>, swift::PrimarySpecificPaths const&, int&, swift::FrontendObserver*) FrontendTool.cpp:0:0
#20 0x000064800b46d663 swift::performCompileStepsPostSema(swift::CompilerInstance&, int&, swift::FrontendObserver*) (/home/andrew/swift/build/buildbot_linux/none-swift_package_sandbox_linux-x86_64/usr/bin/swift-frontend+0xa0a663)
#21 0x000064800b470229 performCompile(swift::CompilerInstance&, int&, swift::FrontendObserver*) FrontendTool.cpp:0:0
#22 0x000064800b46f4bb swift::performFrontend(llvm::ArrayRef<char const*>, char const*, void*, swift::FrontendObserver*) (/home/andrew/swift/build/buildbot_linux/none-swift_package_sandbox_linux-x86_64/usr/bin/swift-frontend+0xa0c4bb)
#23 0x000064800b286e3a swift::mainEntry(int, char const**) (/home/andrew/swift/build/buildbot_linux/none-swift_package_sandbox_linux-x86_64/usr/bin/swift-frontend+0x823e3a)
#24 0x000079d5b3029d90 __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:58:16
#25 0x000079d5b3029e40 call_init ./csu/../csu/libc-start.c:128:20
#26 0x000079d5b3029e40 __libc_start_main ./csu/../csu/libc-start.c:379:5
#27 0x000064800b2862b5 _start (/home/andrew/swift/build/buildbot_linux/none-swift_package_sandbox_linux-x86_64/usr/bin/swift-frontend+0x8232b5)

1 Like

Thanks @ADKaster, this looks like a bug in the Swift compiler. Could you please create a GitHub issue to track this?

As a workaround, you could annotate the C++ type String with __attribute__((swift_name("CXXString"))) to make it unambiguous in Swift.

Sure, can do. I was hoping to be able to reduce the issue into one that doesn't require my entire project (which only builds on Unix-like systems) before reporting it to swiftlang/swift, but if you think it's still valuable to track there I can create issues for this and a couple other non-reduced issues I've been tracking on our bug tracker.

Unfortunately, adding SWIFT_NAME(CxxString) to my String.h type does not fix the crash, as the name String is still ambiguous. It seems like the swift_name attribute adds an alias, rather than a full rename?

4.	While emitting IR SIL function "@$s14TestAKBindings1fyySo2AKO6StringVF".
 for 'f(_:)' (at /Users/andrew/Source/ladybird-browser/Tests/AK/TestAKBindings.swift:3:1)
5.	While mangling type for debugger type 'String'
import AK

//func f(_ x: String) {} // crash
func g(_ x: Swift.String) {} // ok
func h(_ x: AK.String) {} // ok
func i(_ x: AK.CxxString) {} // ok