Skip to content

[SR-13419] Compiler crash when returning an opaque result type #55860

@ffried

Description

@ffried
Previous ID SR-13419
Radar rdar://problem/67451810
Original Reporter @ffried
Type Bug
Status Resolved
Resolution Done

Attachment: Download

Environment

Swift 5.3 as included in Xcode 12 beta 5:

Apple Swift version 5.3 (swiftlang-1200.0.28.1 clang-1200.0.30.1)
Target: x86_64-apple-darwin20.0.0

Additional Detail from JIRA
Votes 0
Component/s Compiler
Labels Bug, OpaqueResultTypes
Assignee None
Priority Medium

md5: 82a59a425ebce07e0e6bc7ddbd3cb63d

Issue Description:

The compiler crashes when compiling the following two source files:

OpaqueDefinition.swift

protocol SomeProtocol {}

fileprivate struct AnySomeProtocol: SomeProtocol {
   private let inner: SomeProtocol

   init<T: SomeProtocol>(_ inner: T) {
      self.inner = inner
   }
}

extension SomeProtocol {
   var asAny: some SomeProtocol { AnySomeProtocol(self) }
}

OpaqueUsage.swift

struct User {
   let other: SomeProtocol

   func takeSome<S: SomeProtocol>(_ some: S) {}
   func useSome() { takeSome(other.asAny) }
}

Running swiftc -v OpaqueDefinition.swift OpaqueUsage.swift results in the following output:

Apple Swift version 5.3 (swiftlang-1200.0.28.1 clang-1200.0.30.1)
Target: x86_64-apple-darwin20.0.0
/Applications/Xcode-beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift -frontend -c -primary-file OpaqueDefinition.swift OpaqueUsage.swift -target x86_64-apple-darwin20.0.0 -enable-objc-interop -sdk /Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.0.sdk -color-diagnostics -target-sdk-version 11.0 -module-name main -o /var/folders/0z/101fmx1n5hl3g6l0vrn5g9qh0000gn/T/OpaqueDefinition-2715c9.o
/Applications/Xcode-beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift -frontend -c OpaqueDefinition.swift -primary-file OpaqueUsage.swift -target x86_64-apple-darwin20.0.0 -enable-objc-interop -sdk /Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.0.sdk -color-diagnostics -target-sdk-version 11.0 -module-name main -o /var/folders/0z/101fmx1n5hl3g6l0vrn5g9qh0000gn/T/OpaqueUsage-7967e9.o
Stack dump:
0.  Program arguments: /Applications/Xcode-beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift -frontend -c OpaqueDefinition.swift -primary-file OpaqueUsage.swift -target x86_64-apple-darwin20.0.0 -enable-objc-interop -sdk /Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.0.sdk -color-diagnostics -target-sdk-version 11.0 -module-name main -o /var/folders/0z/101fmx1n5hl3g6l0vrn5g9qh0000gn/T/OpaqueUsage-7967e9.o 
1.  Apple Swift version 5.3 (swiftlang-1200.0.28.1 clang-1200.0.30.1)
2.  While evaluating request IRGenSourceFileRequest(IR Generation for file "OpaqueUsage.swift")
3.  While emitting IR SIL function "@$s4main4UserV7useSomeyyF".
 for 'useSome()' (at OpaqueUsage.swift:5:4)
0  swift                    0x000000010f0f4a85 llvm::sys::PrintStackTrace(llvm::raw_ostream&) + 37
1  swift                    0x000000010f0f3a85 llvm::sys::RunSignalHandlers() + 85
2  swift                    0x000000010f0f503f SignalHandler(int) + 111
3  libsystem_platform.dylib 0x00007fff6ab84d7d _sigtramp + 29
4  libsystem_platform.dylib 0x00007fe6218b36e8 _sigtramp + 18446743965107677576
5  swift                    0x000000010afcf9f8 swift::irgen::emitWitnessTableRef(swift::irgen::IRGenFunction&, swift::CanType, llvm::Value**, swift::ProtocolConformanceRef) + 280
6  swift                    0x000000010ae79cd0 void llvm::function_ref<void (swift::irgen::GenericRequirement)>::callback_fn<withOpaqueTypeGenericArgs(swift::irgen::IRGenFunction&, swift::CanTypeWrapper<swift::OpaqueTypeArchetypeType>, llvm::function_ref<void (llvm::Value*)>)::$_2>(long, swift::irgen::GenericRequirement) + 512
7  swift                    0x000000010afc753e swift::irgen::enumerateGenericSignatureRequirements(swift::CanGenericSignature, llvm::function_ref<void (swift::irgen::GenericRequirement)> const&) + 318
8  swift                    0x000000010ae76b81 withOpaqueTypeGenericArgs(swift::irgen::IRGenFunction&, swift::CanTypeWrapper<swift::OpaqueTypeArchetypeType>, llvm::function_ref<void (llvm::Value*)>) + 561
9  swift                    0x000000010ae755dd swift::irgen::emitArchetypeWitnessTableRef(swift::irgen::IRGenFunction&, swift::CanTypeWrapper<swift::ArchetypeType>, swift::ProtocolDecl*) + 2269
10 swift                    0x000000010afd06f5 swift::irgen::emitGenericRequirementFromSubstitutions(swift::irgen::IRGenFunction&, swift::CanGenericSignature, swift::ModuleDecl&, swift::irgen::GenericRequirement, swift::SubstitutionMap) + 197
11 swift                    0x000000010afd6803 void llvm::function_ref<void (swift::irgen::GenericRequirement)>::callback_fn<(anonymous namespace)::EmitPolymorphicArguments::emit(swift::SubstitutionMap, swift::irgen::WitnessMetadata*, swift::irgen::Explosion&)::$_21>(long, swift::irgen::GenericRequirement) + 35
12 swift                    0x000000010afd6929 void llvm::function_ref<void (swift::irgen::GenericRequirement)>::callback_fn<(anonymous namespace)::PolymorphicConvention::enumerateUnfulfilledRequirements(llvm::function_ref<void (swift::irgen::GenericRequirement)> const&)::$_11>(long, swift::irgen::GenericRequirement) + 233
13 swift                    0x000000010afd012b (anonymous namespace)::PolymorphicConvention::enumerateUnfulfilledRequirements(llvm::function_ref<void (swift::irgen::GenericRequirement)> const&) + 347
14 swift                    0x000000010afcfc1d swift::irgen::emitPolymorphicArguments(swift::irgen::IRGenFunction&, swift::CanTypeWrapper<swift::SILFunctionType>, swift::SubstitutionMap, swift::irgen::WitnessMetadata*, swift::irgen::Explosion&) + 365
15 swift                    0x000000010b06c992 (anonymous namespace)::IRGenSILFunction::visitFullApplySite(swift::FullApplySite) + 4098
16 swift                    0x000000010b04b156 swift::irgen::IRGenModule::emitSILFunction(swift::SILFunction*) + 8982
17 swift                    0x000000010aee52f7 swift::irgen::IRGenerator::emitGlobalTopLevel(llvm::StringSet<llvm::MallocAllocator>*) + 1607
18 swift                    0x000000010b01ff07 performIRGeneration(swift::IRGenOptions const&, swift::ModuleDecl*, std::__1::unique_ptr<swift::SILModule, std::__1::default_delete<swift::SILModule> >, llvm::StringRef, swift::PrimarySpecificPaths const&, llvm::StringRef, swift::SourceFile*, llvm::GlobalVariable**, llvm::StringSet<llvm::MallocAllocator>*) + 1687
19 swift                    0x000000010b048bb1 swift::SimpleRequest<swift::IRGenSourceFileRequest, swift::GeneratedModule (swift::IRGenDescriptor), (swift::RequestFlags)9>::evaluateRequest(swift::IRGenSourceFileRequest const&, swift::Evaluator&) + 97
20 swift                    0x000000010b02431c llvm::Expected<swift::IRGenSourceFileRequest::OutputType> swift::Evaluator::getResultUncached<swift::IRGenSourceFileRequest>(swift::IRGenSourceFileRequest const&) + 940
21 swift                    0x000000010b02056d swift::performIRGeneration(swift::IRGenOptions const&, swift::SourceFile&, std::__1::unique_ptr<swift::SILModule, std::__1::default_delete<swift::SILModule> >, llvm::StringRef, swift::PrimarySpecificPaths const&, llvm::StringRef, llvm::GlobalVariable**, llvm::StringSet<llvm::MallocAllocator>*) + 269
22 swift                    0x000000010ac6c38a performCompileStepsPostSILGen(swift::CompilerInstance&, swift::CompilerInvocation const&, std::__1::unique_ptr<swift::SILModule, std::__1::default_delete<swift::SILModule> >, llvm::PointerUnion<swift::ModuleDecl*, swift::SourceFile*>, swift::PrimarySpecificPaths const&, int&, swift::FrontendObserver*) + 3002
23 swift                    0x000000010ac5bf98 swift::performFrontend(llvm::ArrayRef<char const*>, char const*, void*, swift::FrontendObserver*) + 20712
24 swift                    0x000000010abdd277 main + 1255
25 libdyld.dylib            0x00007fff6a956851 start + 1
26 libdyld.dylib            0x0000000000000012 start + 18446603338727987138
<unknown>:0: error: unable to execute command: Segmentation fault: 11
<unknown>:0: error: compile command failed due to signal 11 (use -v to see invocation)

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugA deviation from expected or documented behavior. Also: expected but undesirable behavior.compilerThe Swift compiler itselfopaque typesFeature → types: opaque types

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions