Skip to content
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

[SR-9199] Compiler crash surrounding typealias' and constraints #51690

Closed
swift-ci opened this issue Nov 6, 2018 · 2 comments
Closed

[SR-9199] Compiler crash surrounding typealias' and constraints #51690

swift-ci opened this issue Nov 6, 2018 · 2 comments
Assignees
Labels
bug A deviation from expected or documented behavior. Also: expected but undesirable behavior. compiler The Swift compiler in itself crash Bug: A crash, i.e., an abnormal termination of software

Comments

@swift-ci
Copy link
Collaborator

swift-ci commented Nov 6, 2018

Previous ID SR-9199
Radar None
Original Reporter twof (JIRA User)
Type Bug
Status Resolved
Resolution Done
Environment

Swift 4.2
macOS 10.13.6

Additional Detail from JIRA
Votes 0
Component/s Compiler
Labels Bug, CompilerCrash
Assignee @belkadan
Priority Medium

md5: 8495363c204f720420a68dcefb21d7f0

Issue Description:

Repro snippet:

protocol Publicable {
    associatedtype PublicModel

    func publicized() -> PublicModel
}


protocol WithReturnType {
    associatedtype MainType
    associatedtype ReturnType

    func returnTheThing()
}

extension WithReturnType where MainType: Publicable {
    typealias ReturnType = MainType.PublicModel

    func returnTheThing() {
        print("publicable")
    }
}

extension WithReturnType {
    func returnTheThing() {
        print("not publicable")
    }
}

extension String: Publicable {
    struct PublicString {
        let inner: String

        init(str: String) {
            self.inner = "Public: \(str)"
        }
    }

    func publicized() -> PublicString {
        return PublicString(str: self)
    }
}

struct Controller<T> {

}

extension Controller: WithReturnType {
    typealias MainType = T
}

let controller = Controller<String>()

controller.returnTheThing()
{\code}

Crash log:

0 swift 0x00000001071be38a PrintStackTraceSignalHandler(void*) + 42
1 swift 0x00000001071bdb3e SignalHandler(int) + 302
2 libsystem_platform.dylib 0x00007fff64076b3d _sigtramp + 29
3 swift 0x0000000106ef0149 llvm::BitstreamCursor::readRecord(unsigned int, llvm::SmallVectorImpl<unsigned long long>&, llvm::StringRef*) + 889
4 swift 0x00000001049b9709 llvm::Optional<swift::Type> llvm::function_ref<llvm::Optional<swift::Type> (swift::TypeBase*)>::callback_fn<swift::Type::transform(llvm::function_ref<swift::Type (swift::Type)>) const::$_15>(long, swift::TypeBase*) + 25
5 swift 0x00000001049b9778 swift::Type::transformRec(llvm::function_ref<llvm::Optional<swift::Type> (swift::TypeBase*)>) const + 56
6 swift 0x000000010366c804 swift::irgen::IRGenFunction::emitTypeMetadataRef(swift::CanType, swift::irgen::DynamicMetadataRequest) + 84
7 swift 0x000000010366c507 (anonymous namespace)::EmitTypeMetadataRef::visitAnyMetatypeType(swift::CanTypeWrapper<swift::AnyMetatypeType>, swift::irgen::DynamicMetadataRequest) + 199
8 swift 0x0000000103668abb emitDirectTypeMetadataRef(swift::irgen::IRGenFunction&, swift::CanType, swift::irgen::DynamicMetadataRequest) + 363
9 swift 0x000000010366893a swift::irgen::MetadataResponse llvm::function_ref<swift::irgen::MetadataResponse (swift::irgen::IRGenFunction&, swift::irgen::DynamicMetadataRequest, llvm::Constant*)>::callback_fn<swift::irgen::createDirectTypeMetadataAccessFunction(swift::irgen::IRGenModule&, swift::CanType, bool)::$_2>(long, swift::irgen::IRGenFunction&, swift::irgen::DynamicMetadataRequest, llvm::Constant*) + 378
10 swift 0x00000001036687a9 swift::irgen::MetadataResponse llvm::function_ref<swift::irgen::MetadataResponse (swift::irgen::IRGenFunction&, swift::irgen::Explosion&)>::callback_fn<swift::irgen::createTypeMetadataAccessFunction(swift::irgen::IRGenModule&, swift::CanType, swift::irgen::CacheStrategy, llvm::function_ref<swift::irgen::MetadataResponse (swift::irgen::IRGenFunction&, swift::irgen::DynamicMetadataRequest, llvm::Constant*)>, bool)::$_1>(long, swift::irgen::IRGenFunction&, swift::irgen::Explosion&) + 89
11 swift 0x00000001036669e7 swift::irgen::emitCacheAccessFunction(swift::irgen::IRGenModule&, llvm::Function*, llvm::Constant*, swift::irgen::CacheStrategy, llvm::function_ref<swift::irgen::MetadataResponse (swift::irgen::IRGenFunction&, swift::irgen::Explosion&)>, bool) + 1495
12 swift 0x000000010366871b swift::irgen::createTypeMetadataAccessFunction(swift::irgen::IRGenModule&, swift::CanType, swift::irgen::CacheStrategy, llvm::function_ref<swift::irgen::MetadataResponse (swift::irgen::IRGenFunction&, swift::irgen::DynamicMetadataRequest, llvm::Constant*)>, bool) + 1227
13 swift 0x000000010366cbd5 swift::irgen::getOrCreateTypeMetadataAccessFunction(swift::irgen::IRGenModule&, swift::CanType) + 149
14 swift 0x000000010366c8e6 swift::irgen::IRGenFunction::emitTypeMetadataRef(swift::CanType, swift::irgen::DynamicMetadataRequest) + 310
15 swift 0x000000010366c507 (anonymous namespace)::EmitTypeMetadataRef::visitAnyMetatypeType(swift::CanTypeWrapper<swift::AnyMetatypeType>, swift::irgen::DynamicMetadataRequest) + 199
16 swift 0x0000000103668abb emitDirectTypeMetadataRef(swift::irgen::IRGenFunction&, swift::CanType, swift::irgen::DynamicMetadataRequest) + 363
17 swift 0x000000010366893a swift::irgen::MetadataResponse llvm::function_ref<swift::irgen::MetadataResponse (swift::irgen::IRGenFunction&, swift::irgen::DynamicMetadataRequest, llvm::Constant*)>::callback_fn<swift::irgen::createDirectTypeMetadataAccessFunction(swift::irgen::IRGenModule&, swift::CanType, bool)::$_2>(long, swift::irgen::IRGenFunction&, swift::irgen::DynamicMetadataRequest, llvm::Constant*) + 378
18 swift 0x00000001036687a9 swift::irgen::MetadataResponse llvm::function_ref<swift::irgen::MetadataResponse (swift::irgen::IRGenFunction&, swift::irgen::Explosion&)>::callback_fn<swift::irgen::createTypeMetadataAccessFunction(swift::irgen::IRGenModule&, swift::CanType, swift::irgen::CacheStrategy, llvm::function_ref<swift::irgen::MetadataResponse (swift::irgen::IRGenFunction&, swift::irgen::DynamicMetadataRequest, llvm::Constant*)>, bool)::$_1>(long, swift::irgen::IRGenFunction&, swift::irgen::Explosion&) + 89
19 swift 0x00000001036669e7 swift::irgen::emitCacheAccessFunction(swift::irgen::IRGenModule&, llvm::Function*, llvm::Constant*, swift::irgen::CacheStrategy, llvm::function_ref<swift::irgen::MetadataResponse (swift::irgen::IRGenFunction&, swift::irgen::Explosion&)>, bool) + 1495
20 swift 0x000000010366871b swift::irgen::createTypeMetadataAccessFunction(swift::irgen::IRGenModule&, swift::CanType, swift::irgen::CacheStrategy, llvm::function_ref<swift::irgen::MetadataResponse (swift::irgen::IRGenFunction&, swift::irgen::DynamicMetadataRequest, llvm::Constant*)>, bool) + 1227
21 swift 0x000000010366cbd5 swift::irgen::getOrCreateTypeMetadataAccessFunction(swift::irgen::IRGenModule&, swift::CanType) + 149
22 swift 0x000000010366c8e6 swift::irgen::IRGenFunction::emitTypeMetadataRef(swift::CanType, swift::irgen::DynamicMetadataRequest) + 310
23 swift 0x000000010366c507 (anonymous namespace)::EmitTypeMetadataRef::visitAnyMetatypeType(swift::CanTypeWrapper<swift::AnyMetatypeType>, swift::irgen::DynamicMetadataRequest) + 199
24 swift 0x0000000103668abb emitDirectTypeMetadataRef(swift::irgen::IRGenFunction&, swift::CanType, swift::irgen::DynamicMetadataRequest) + 363
25 swift 0x000000010366893a swift::irgen::MetadataResponse llvm::function_ref<swift::irgen::MetadataResponse (swift::irgen::IRGenFunction&, swift::irgen::DynamicMetadataRequest, llvm::Constant*)>::callback_fn<swift::irgen::createDirectTypeMetadataAccessFunction(swift::irgen::IRGenModule&, swift::CanType, bool)::$_2>(long, swift::irgen::IRGenFunction&, swift::irgen::DynamicMetadataRequest, llvm::Constant*) + 378
26 swift 0x00000001036687a9 swift::irgen::MetadataResponse llvm::function_ref<swift::irgen::MetadataResponse (swift::irgen::IRGenFunction&, swift::irgen::Explosion&)>::callback_fn<swift::irgen::createTypeMetadataAccessFunction(swift::irgen::IRGenModule&, swift::CanType, swift::irgen::CacheStrategy, llvm::function_ref<swift::irgen::MetadataResponse (swift::irgen::IRGenFunction&, swift::irgen::DynamicMetadataRequest, llvm::Constant*)>, bool)::$_1>(long, swift::irgen::IRGenFunction&, swift::irgen::Explosion&) + 89
27 swift 0x00000001036669e7 swift::irgen::emitCacheAccessFunction(swift::irgen::IRGenModule&, llvm::Function*, llvm::Constant*, swift::irgen::CacheStrategy, llvm::function_ref<swift::irgen::MetadataResponse (swift::irgen::IRGenFunction&, swift::irgen::Explosion&)>, bool) + 1495
28 swift 0x000000010366871b swift::irgen::createTypeMetadataAccessFunction(swift::irgen::IRGenModule&, swift::CanType, swift::irgen::CacheStrategy, llvm::function_ref<swift::irgen::MetadataResponse (swift::irgen::IRGenFunction&, swift::irgen::DynamicMetadataRequest, llvm::Constant*)>, bool) + 1227
29 swift 0x000000010366cbd5 swift::irgen::getOrCreateTypeMetadataAccessFunction(swift::irgen::IRGenModule&, swift::CanType) + 149
30 swift 0x00000001035b8cbb swift::SILWitnessVisitor<(anonymous namespace)::WitnessTableBuilder>::visitProtocolDecl(swift::ProtocolDecl*)::'lambda'()::operator()() const + 763
31 swift 0x00000001035b8219 swift::SILWitnessVisitor<(anonymous namespace)::WitnessTableBuilder>::visitProtocolDecl(swift::ProtocolDecl*) + 6361
32 swift 0x00000001035b43de swift::irgen::IRGenModule::emitSILWitnessTable(swift::SILWitnessTable*) + 1326
33 swift 0x00000001034f6ecb swift::irgen::IRGenerator::emitGlobalTopLevel(bool) + 2491
34 swift 0x00000001035fab73 performIRGeneration(swift::IRGenOptions&, swift::ModuleDecl*, std::**1::unique_ptr<swift::SILModule, std::_1::default_delete<swift::SILModule> >, llvm::StringRef, swift::PrimarySpecificPaths const&, llvm::LLVMContext&, swift::SourceFile*, llvm::GlobalVariable**, unsigned int) + 1075
35 swift 0x00000001035f7f00 swift::performIRGeneration(swift::IRGenOptions&, swift::ModuleDecl*, std::1::unique_ptr<swift::SILModule, std::1::default_delete<swift::SILModule> >, llvm::StringRef, swift::PrimarySpecificPaths const&, llvm::LLVMContext&, llvm::ArrayRef<std::1::basic_string<char, std::1::char_traits<char>, std::
_1::allocator<char> > >, llvm::GlobalVariable**) + 704
36 swift 0x000000010342ee25 performCompile(swift::CompilerInstance&, swift::CompilerInvocation&, llvm::ArrayRef<char const*>, int&, swift::FrontendObserver*, swift::UnifiedStatsReporter*) + 47141
37 swift 0x0000000103420356 swift::performFrontend(llvm::ArrayRef<char const*>, char const*, void*, swift::FrontendObserver*) + 7814
38 swift 0x00000001033c5375 main + 1349
39 libdyld.dylib 0x00007fff63e8d0a5 start + 1
{\code}

@belkadan
Copy link
Contributor

belkadan commented Nov 6, 2018

Looks like it's fixed on master, but we should probably add this as a test case. I'll take care of that.

@belkadan
Copy link
Contributor

belkadan commented Nov 7, 2018

#20386

@swift-ci swift-ci transferred this issue from apple/swift-issues Apr 25, 2022
@AnthonyLatsis AnthonyLatsis added the crash Bug: A crash, i.e., an abnormal termination of software label Dec 12, 2022
This issue was closed.
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. compiler The Swift compiler in itself crash Bug: A crash, i.e., an abnormal termination of software
Projects
None yet
Development

No branches or pull requests

3 participants