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-8094] Compiler crash when type-checking generic implementation of an @objc protocol with associatedtype #50627

Closed
hartbit opened this issue Jun 25, 2018 · 3 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

@hartbit
Copy link
Collaborator

hartbit commented Jun 25, 2018

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
@belkadan
Copy link
Contributor

   Assertion failed: (resolver && "Unable to resolve type witness"), function getTypeWitnessAndDecl, file /Volumes/Data/swift-public/swift/lib/AST/ProtocolConformance.cpp, line 609.

But really we should probably just mark the whole protocol invalid in this case, though I'm not sure which error should cause that.

@swift-ci create

@DougGregor
Copy link
Member

#19754

@AnnaZaks
Copy link
Mannequin

AnnaZaks mannequin commented Jul 23, 2019

@hartbit, Could you verify if the problem is fixed and if so move the JIRA to "Closed"?

Thanks!
Anna

@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

4 participants