Skip to content

[SR-8094] Compiler crash when type-checking generic implementation of an @objc protocol with associatedtype #50627

@hartbit

Description

@hartbit
Previous ID SR-8094
Radar rdar://problem/41425828
Original Reporter @hartbit
Type Bug
Status Closed
Resolution Done
Additional Detail from JIRA
Votes 0
Component/s Compiler
Labels Bug, CompilerCrash
Assignee @DougGregor
Priority Medium

md5: 9e0b02a0af3cd59e317bb63c28706717

Issue Description:

@objc protocol Foo {
    associatedtype Bar
    var property: Generic<Bar> { get }
}

class Generic<Element> {
}

class FooImpl<T>: NSObject, Foo {
    let property: Generic<T>
}

And the error:

/Users/david/Desktop/SpeechRecognizerTests/SpeechRecognizerTests/DebugVariable.swift:15:20: error: associated type 'Bar' cannot be declared inside '@objc' protocol 'Foo'
    associatedtype Bar
                   ^
/Users/david/Desktop/SpeechRecognizerTests/SpeechRecognizerTests/DebugVariable.swift:16:9: error: property cannot be a member of an @objc protocol because its type cannot be represented in Objective-C
    var property: Generic<Bar> { get }
        ^         ~~~~~~~~~~~~
/Users/david/Desktop/SpeechRecognizerTests/SpeechRecognizerTests/DebugVariable.swift:16:19: note: classes not annotated with @objc cannot be represented in Objective-C
    var property: Generic<Bar> { get }
                  ^~~~~~~~~~~~
/Users/david/Desktop/SpeechRecognizerTests/SpeechRecognizerTests/DebugVariable.swift:16:9: note: inferring '@objc' because the declaration is a member of an '@objc' protocol
    var property: Generic<Bar> { get }
        ^
0  swift                    0x0000000110878a9a PrintStackTraceSignalHandler(void*) + 42
1  swift                    0x0000000110877ea6 SignalHandler(int) + 966
2  libsystem_platform.dylib 0x00007fff658b3f5a _sigtramp + 26
3  libsystem_platform.dylib 0x00007ffee311a688 _sigtramp + 2105960264
4  swift                    0x000000010e084f6f swift::ProtocolConformance::getTypeWitnessAndDecl(swift::AssociatedTypeDecl*, swift::LazyResolver*, swift::SubstOptions) const + 463
5  swift                    0x000000010dcea1b2 swift::TypeChecker::resolveWitness(swift::NormalProtocolConformance const*, swift::ValueDecl*) + 418
6  swift                    0x000000010e085ebe swift::NormalProtocolConformance::getWitness(swift::ValueDecl*, swift::LazyResolver*) const + 190
7  swift                    0x000000010dce6f24 swift::TypeChecker::findWitnessedObjCRequirements(swift::ValueDecl const*, bool) + 772
8  swift                    0x000000010dc89616 shouldMarkAsObjC(swift::TypeChecker&, swift::ValueDecl const*, bool) + 1606
9  swift                    0x000000010dc7cea4 swift::TypeChecker::validateDecl(swift::ValueDecl*) + 8212
10 swift                    0x000000010dc9d4dd std::__1::__function::__func<(anonymous namespace)::DeclChecker::visitBoundVars(swift::Pattern*)::'lambda'(swift::VarDecl*), std::__1::allocator<(anonymous namespace)::DeclChecker::visitBoundVars(swift::Pattern*)::'lambda'(swift::VarDecl*)>, void (swift::VarDecl*)>::operator()(swift::VarDecl*&&) + 45
11 swift                    0x000000010e080685 swift::Pattern::forEachVariable(std::__1::function<void (swift::VarDecl*)> const&) const + 261
12 swift                    0x000000010dc96308 (anonymous namespace)::DeclChecker::visit(swift::Decl*) + 2776
13 swift                    0x000000010dc99aab (anonymous namespace)::DeclChecker::visitClassDecl(swift::ClassDecl*) + 411
14 swift                    0x000000010dc95a19 (anonymous namespace)::DeclChecker::visit(swift::Decl*) + 489
15 swift                    0x000000010dd2d486 swift::performTypeChecking(swift::SourceFile&, swift::TopLevelContext&, swift::OptionSet<swift::TypeCheckingFlags, unsigned int>, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) + 1830
16 swift                    0x000000010d964c25 swift::CompilerInstance::performSema() + 4933
17 swift                    0x000000010cb6138b performCompile(swift::CompilerInstance&, swift::CompilerInvocation&, llvm::ArrayRef<char const*>, int&, swift::FrontendObserver*, swift::UnifiedStatsReporter*) + 731
18 swift                    0x000000010cb5dbbf swift::performFrontend(llvm::ArrayRef<char const*>, char const*, void*, swift::FrontendObserver*) + 7839
19 swift                    0x000000010cb07768 main + 13144
20 libdyld.dylib            0x00007fff655a5015 start + 1
Stack dump:
0.  Program arguments: /Applications/Xcode-beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift -frontend -c /Users/david/Desktop/SpeechRecognizerTests/SpeechRecognizerTests/ViewController.swift -primary-file /Users/david/Desktop/SpeechRecognizerTests/SpeechRecognizerTests/DebugVariable.swift /Users/david/Desktop/SpeechRecognizerTests/SpeechRecognizerTests/AppDelegate.swift /Users/david/Desktop/SpeechRecognizerTests/SpeechRecognizerTests/SpeechView.swift /Users/david/Desktop/SpeechRecognizerTests/SpeechRecognizerTests/SpeechRecognizer.swift -emit-module-path /Users/david/Library/Developer/Xcode/DerivedData/SpeechRecognizerTests-cwygaokbyhlhiofzmhcrhxqbpbwt/Build/Intermediates.noindex/SpeechRecognizerTests.build/Debug-iphoneos/SpeechRecognizerTests.build/Objects-normal/arm64/DebugVariable~partial.swiftmodule -emit-module-doc-path /Users/david/Library/Developer/Xcode/DerivedData/SpeechRecognizerTests-cwygaokbyhlhiofzmhcrhxqbpbwt/Build/Intermediates.noindex/SpeechRecognizerTests.build/Debug-iphoneos/SpeechRecognizerTests.build/Objects-normal/arm64/DebugVariable~partial.swiftdoc -serialize-diagnostics-path /Users/david/Library/Developer/Xcode/DerivedData/SpeechRecognizerTests-cwygaokbyhlhiofzmhcrhxqbpbwt/Build/Intermediates.noindex/SpeechRecognizerTests.build/Debug-iphoneos/SpeechRecognizerTests.build/Objects-normal/arm64/DebugVariable.dia -emit-dependencies-path /Users/david/Library/Developer/Xcode/DerivedData/SpeechRecognizerTests-cwygaokbyhlhiofzmhcrhxqbpbwt/Build/Intermediates.noindex/SpeechRecognizerTests.build/Debug-iphoneos/SpeechRecognizerTests.build/Objects-normal/arm64/DebugVariable.d -emit-reference-dependencies-path /Users/david/Library/Developer/Xcode/DerivedData/SpeechRecognizerTests-cwygaokbyhlhiofzmhcrhxqbpbwt/Build/Intermediates.noindex/SpeechRecognizerTests.build/Debug-iphoneos/SpeechRecognizerTests.build/Objects-normal/arm64/DebugVariable.swiftdeps -target arm64-apple-ios11.4 -Xllvm -aarch64-use-tbi -enable-objc-interop -sdk /Applications/Xcode-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.0.sdk -I /Users/david/Library/Developer/Xcode/DerivedData/SpeechRecognizerTests-cwygaokbyhlhiofzmhcrhxqbpbwt/Build/Products/Debug-iphoneos -F /Users/david/Library/Developer/Xcode/DerivedData/SpeechRecognizerTests-cwygaokbyhlhiofzmhcrhxqbpbwt/Build/Products/Debug-iphoneos -F /Users/david/Library/Developer/Xcode/DerivedData/SpeechRecognizerTests-cwygaokbyhlhiofzmhcrhxqbpbwt/Build/Products/Debug-iphoneos/RxCocoa -F /Users/david/Library/Developer/Xcode/DerivedData/SpeechRecognizerTests-cwygaokbyhlhiofzmhcrhxqbpbwt/Build/Products/Debug-iphoneos/RxSwift -enable-testing -g -module-cache-path /Users/david/Library/Developer/Xcode/DerivedData/ModuleCache.noindex -swift-version 4 -enforce-exclusivity=checked -Onone -D DEBUG -D COCOAPODS -serialize-debugging-options -Xcc -working-directory -Xcc /Users/david/Desktop/SpeechRecognizerTests -Xcc -I/Users/david/Library/Developer/Xcode/DerivedData/SpeechRecognizerTests-cwygaokbyhlhiofzmhcrhxqbpbwt/Build/Intermediates.noindex/SpeechRecognizerTests.build/Debug-iphoneos/SpeechRecognizerTests.build/swift-overrides.hmap -Xcc -iquote -Xcc /Users/david/Library/Developer/Xcode/DerivedData/SpeechRecognizerTests-cwygaokbyhlhiofzmhcrhxqbpbwt/Build/Intermediates.noindex/SpeechRecognizerTests.build/Debug-iphoneos/SpeechRecognizerTests.build/SpeechRecognizerTests-generated-files.hmap -Xcc -I/Users/david/Library/Developer/Xcode/DerivedData/SpeechRecognizerTests-cwygaokbyhlhiofzmhcrhxqbpbwt/Build/Intermediates.noindex/SpeechRecognizerTests.build/Debug-iphoneos/SpeechRecognizerTests.build/SpeechRecognizerTests-own-target-headers.hmap -Xcc -I/Users/david/Library/Developer/Xcode/DerivedData/SpeechRecognizerTests-cwygaokbyhlhiofzmhcrhxqbpbwt/Build/Intermediates.noindex/SpeechRecognizerTests.build/Debug-iphoneos/SpeechRecognizerTests.build/SpeechRecognizerTests-all-non-framework-target-headers.hmap -Xcc -ivfsoverlay -Xcc /Users/david/Library/Developer/Xcode/DerivedData/SpeechRecognizerTests-cwygaokbyhlhiofzmhcrhxqbpbwt/Build/Intermediates.noindex/SpeechRecognizerTests.build/Debug-iphoneos/SpeechRecognizerTests.build/all-product-headers.yaml -Xcc -iquote -Xcc /Users/david/Library/Developer/Xcode/DerivedData/SpeechRecognizerTests-cwygaokbyhlhiofzmhcrhxqbpbwt/Build/Intermediates.noindex/SpeechRecognizerTests.build/Debug-iphoneos/SpeechRecognizerTests.build/SpeechRecognizerTests-project-headers.hmap -Xcc -I/Users/david/Library/Developer/Xcode/DerivedData/SpeechRecognizerTests-cwygaokbyhlhiofzmhcrhxqbpbwt/Build/Products/Debug-iphoneos/include -Xcc -I/Users/david/Library/Developer/Xcode/DerivedData/SpeechRecognizerTests-cwygaokbyhlhiofzmhcrhxqbpbwt/Build/Intermediates.noindex/SpeechRecognizerTests.build/Debug-iphoneos/SpeechRecognizerTests.build/DerivedSources/arm64 -Xcc -I/Users/david/Library/Developer/Xcode/DerivedData/SpeechRecognizerTests-cwygaokbyhlhiofzmhcrhxqbpbwt/Build/Intermediates.noindex/SpeechRecognizerTests.build/Debug-iphoneos/SpeechRecognizerTests.build/DerivedSources -Xcc -DDEBUG=1 -Xcc -DCOCOAPODS=1 -module-name SpeechRecognizerTests -o /Users/david/Library/Developer/Xcode/DerivedData/SpeechRecognizerTests-cwygaokbyhlhiofzmhcrhxqbpbwt/Build/Intermediates.noindex/SpeechRecognizerTests.build/Debug-iphoneos/SpeechRecognizerTests.build/Objects-normal/arm64/DebugVariable.o -embed-bitcode-marker -index-store-path /Users/david/Library/Developer/Xcode/DerivedData/SpeechRecognizerTests-cwygaokbyhlhiofzmhcrhxqbpbwt/Index/DataStore -index-system-modules 
1.  While type-checking 'FooImpl' at /Users/david/Desktop/SpeechRecognizerTests/SpeechRecognizerTests/DebugVariable.swift:22:1
2.  While type-checking declaration 0x7fc1bf270d58 at /Users/david/Desktop/SpeechRecognizerTests/SpeechRecognizerTests/DebugVariable.swift:23:5
3.  While validating 'property' at /Users/david/Desktop/SpeechRecognizerTests/SpeechRecognizerTests/DebugVariable.swift:23:9
4.  While resolving requirement SpeechRecognizerTests.(file).Foo.Bar@/Users/david/Desktop/SpeechRecognizerTests/SpeechRecognizerTests/DebugVariable.swift:15:20 in conformance <T> FooImpl<T>: Foo module SpeechRecognizerTests
error: Segmentation fault: 11

Metadata

Metadata

Assignees

Labels

bugA deviation from expected or documented behavior. Also: expected but undesirable behavior.compilerThe Swift compiler itselfcrashBug: A crash, i.e., an abnormal termination of software

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions