swiftlang / swift

The Swift Programming Language
https://swift.org
Apache License 2.0
67.51k stars 10.35k forks source link

[SR-14679] Using opaque type as a function's return type, gives "fatal error: unsupported" #57030

Closed swift-ci closed 3 years ago

swift-ci commented 3 years ago
Previous ID SR-14679
Radar None
Original Reporter iostafi (JIRA User)
Type Bug
Status Resolved
Resolution Done
Environment MacOS: 10.15.7 Swift: Apple Swift version 5.3.2 (swiftlang-1200.0.45 clang-1200.0.32.28) Target: x86_64-apple-darwin19.6.0 Tried in iOS simulator and with running swiftc from command line - same result
Additional Detail from JIRA | | | |------------------|-----------------| |Votes | 0 | |Component/s | Compiler | |Labels | Bug | |Assignee | None | |Priority | Medium | md5: 2ddf88c49d37dddb33907ce1c11306d0

Issue Description:

The problem

Swift compiler cannot build the following piece of code:

protocol Hiddenable {}

func getHidden() -> some Hiddenable {
    class Hidden: Hiddenable {}    
    return Hidden()
}

let hidden = getHidden()

But is builds without problem, if func getHidden() -> some Hiddenable is replaced with func getHidden() -> Hiddenable

Stacktrace

fatal error: unsupported
Stack dump:
0.  Program arguments: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift -frontend -c -primary-file Contents.swift -target x86_64-apple-darwin19.6.0 -enable-objc-interop -stack-check -sdk /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.1.sdk -color-diagnostics -target-sdk-version 11.1 -module-name Contents -o Contents.o
1.  Apple Swift version 5.3.2 (swiftlang-1200.0.45 clang-1200.0.32.28)
2.  While evaluating request IRGenSourceFileRequest(IR Generation for file "Contents.swift")
3.  While emitting IR for source file Contents.swift
4.  While emitting class metadata for 'Hidden' (at Contents.swift:4:5)
5.  While emitting metadata for 'Hidden' (at Contents.swift:4:5)
6.  While emitting ObjC metadata for 'Hidden' (at Contents.swift:4:5)
0  swift                    0x00000001135fc615 llvm::sys::PrintStackTrace(llvm::raw_ostream&) + 37
1  swift                    0x00000001135fb615 llvm::sys::RunSignalHandlers() + 85
2  swift                    0x00000001135fcbcf SignalHandler(int) + 111
3  libsystem_platform.dylib 0x00007fff72f495fd _sigtramp + 29
4  libsystem_platform.dylib 0x00007ffee0b3ad58 _sigtramp + 18446744071255824248
5  libsystem_c.dylib        0x00007fff72e1f808 abort + 120
6  swift                    0x0000000110566b04 unreachable(char const*) + 36
7  swift                    0x0000000110566ac0 (anonymous namespace)::Remangler::mangleOpaqueReturnTypeOf(swift::Demangle::Node*) + 0
8  swift                    0x0000000110565654 (anonymous namespace)::Remangler::mangle(swift::Demangle::Node*) + 83492
9  swift                    0x000000011056711b (anonymous namespace)::Remangler::mangleEntityContext(swift::Demangle::Node*, (anonymous namespace)::Remangler::EntityContext&) + 779
10 swift                    0x000000011056a80c (anonymous namespace)::Remangler::mangleNamedEntity(swift::Demangle::Node*, char, llvm::StringRef, (anonymous namespace)::Remangler::EntityContext&, llvm::StringRef) + 380
11 swift                    0x0000000110569672 (anonymous namespace)::Remangler::mangleAnyNominalType(swift::Demangle::Node*, (anonymous namespace)::Remangler::EntityContext&) + 1106
12 swift                    0x0000000110551099 (anonymous namespace)::Remangler::mangle(swift::Demangle::Node*) + 105
13 swift                    0x0000000110556622 (anonymous namespace)::Remangler::mangle(swift::Demangle::Node*) + 22002
14 swift                    0x0000000110550f07 swift::Demangle::mangleNodeOld(swift::Demangle::Node*) + 695
15 swift                    0x00000001102ff795 swift::Mangle::ASTMangler::mangleObjCRuntimeName(swift::NominalTypeDecl const*) + 1525
16 swift                    0x000000011038ecaa mangleObjCRuntimeName(swift::NominalTypeDecl const*, llvm::SmallVectorImpl<char>&) + 378
17 swift                    0x0000000110382a66 swift::ClassDecl::getObjCRuntimeName(llvm::SmallVectorImpl<char>&) const + 246
18 swift                    0x000000010f3d4157 (anonymous namespace)::ClassDataBuilder::emitRODataFields(swift::irgen::ConstantStructBuilder&, swift::irgen::ForMetaClass_t, swift::irgen::HasUpdateCallback_t) + 999
19 swift                    0x000000010f3d2dcf swift::irgen::emitClassPrivateData(swift::irgen::IRGenModule&, swift::ClassDecl*) + 1135
20 swift                    0x000000010f4a22f5 swift::irgen::emitClassMetadata(swift::irgen::IRGenModule&, swift::ClassDecl*, swift::irgen::ClassLayout const&, swift::irgen::ClassLayout const&) + 8853
21 swift                    0x000000010f3d1e9c swift::irgen::IRGenModule::emitClassDecl(swift::ClassDecl*) + 252
22 swift                    0x000000010f3e163b swift::irgen::IRGenModule::emitSourceFile(swift::SourceFile&) + 267
23 swift                    0x000000010f525c4f 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>*) + 1711
24 swift                    0x000000010f54e781 swift::SimpleRequest<swift::IRGenSourceFileRequest, swift::GeneratedModule (swift::IRGenDescriptor), (swift::RequestFlags)9>::evaluateRequest(swift::IRGenSourceFileRequest const&, swift::Evaluator&) + 97
25 swift                    0x000000010f52a04c llvm::Expected<swift::IRGenSourceFileRequest::OutputType> swift::Evaluator::getResultUncached<swift::IRGenSourceFileRequest>(swift::IRGenSourceFileRequest const&) + 940
26 swift                    0x000000010f52629d 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
27 swift                    0x000000010f1701ba 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
28 swift                    0x000000010f15fd97 swift::performFrontend(llvm::ArrayRef<char const*>, char const*, void*, swift::FrontendObserver*) + 20695
29 swift                    0x000000010f0e0c27 main + 1255
30 libdyld.dylib            0x00007fff72d50cc9 start + 1
[1]    64333 abort      swiftc -c Contents.swift
typesanitizer commented 3 years ago

Can you please verify that this is fixed with Swift 5.4 or newer? I see this crash with 5.3.2 but not with 5.4.