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-2370] Compiler crash when subclassing in a different file a class which conforms to a fileprivate protocol #44977

Closed
swift-ci opened this issue Aug 16, 2016 · 9 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

Previous ID SR-2370
Radar rdar://problem/22672176
Original Reporter JJC1138 (JIRA User)
Type Bug
Status Resolved
Resolution Done

Attachment: Download

Environment

Apple Swift version 3.0 (swiftlang-800.0.43.6 clang-800.0.38)
Target: x86_64-apple-macosx10.9
Xcode 8.0 beta 6 (8S201h)
OS X 10.11.6 (15G31)

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

md5: 9cdf9c400567c536aff2a4740836e2d3

is duplicated by:

  • SR-6665 Compiler crash with "top-level value not found"
  • SR-6682 Conformance of base class to private protocol causes SIGABRT when derived class declared in second file

Issue Description:

The compiler is crashing when building a project consisting of two files:

A.swift

fileprivate protocol P {}

class A: P {}

main.swift

class B: A {}

the stack trace is:

0  swift                    0x000000010b79099d PrintStackTraceSignalHandler(void*) + 45
1  swift                    0x000000010b7903e6 SignalHandler(int) + 470
2  libsystem_platform.dylib 0x00007fff990cd52a _sigtramp + 26
3  libsystem_malloc.dylib   0x00007fff9190ea26 szone_malloc_should_clear + 1093
4  swift                    0x0000000109186a05 swift::ModuleFile::readConformance(llvm::BitstreamCursor&) + 869
5  swift                    0x00000001091885fb swift::ModuleFile::loadAllConformances(swift::Decl const*, unsigned long long, llvm::SmallVectorImpl<swift::ProtocolConformance*>&) + 315
6  swift                    0x000000010956293e swift::ConformanceLookupTable::updateLookupTable(swift::NominalTypeDecl*, swift::ConformanceLookupTable::ConformanceStage, swift::LazyResolver*) + 190
7  swift                    0x00000001095629ed swift::ConformanceLookupTable::updateLookupTable(swift::NominalTypeDecl*, swift::ConformanceLookupTable::ConformanceStage, swift::LazyResolver*) + 365
8  swift                    0x0000000109562a60 swift::ConformanceLookupTable::updateLookupTable(swift::NominalTypeDecl*, swift::ConformanceLookupTable::ConformanceStage, swift::LazyResolver*) + 480
9  swift                    0x00000001095bb1ab swift::NominalTypeDecl::getAllProtocols() const + 187
10 swift                    0x0000000108e34532 (anonymous namespace)::NominalTypeWalker::walkToDeclPre(swift::Decl*) + 66
11 swift                    0x0000000109502f34 (anonymous namespace)::Traversal::doIt(swift::Decl*) + 132
12 swift                    0x0000000108ed7bdf swift::SILPassManager::SILPassManager(swift::SILModule*, llvm::StringRef) + 1439
13 swift                    0x0000000108edc92f swift::runSILDiagnosticPasses(swift::SILModule&) + 159
14 swift                    0x0000000108ba82b7 performCompile(swift::CompilerInstance&, swift::CompilerInvocation&, llvm::ArrayRef<char const*>, int&, swift::FrontendObserver*) + 19735
15 swift                    0x0000000108ba12c5 swift::performFrontend(llvm::ArrayRef<char const*>, char const*, void*, swift::FrontendObserver*) + 17029
16 swift                    0x0000000108b5e88d main + 8685
17 libdyld.dylib            0x00007fff8a3905ad start + 1
18 libdyld.dylib            0x0000000000000034 start + 1975974536
Stack dump:
0.  Program arguments: /Applications/Xcode-beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift -frontend -emit-module /Users/Jon/Library/Developer/Xcode/DerivedData/fileprivate_Protocol_Crash-abhdfahmyannftfzmymhqhmbusbh/Build/Intermediates/fileprivate Protocol Crash.build/Debug/fileprivate Protocol Crash.build/Objects-normal/x86_64/main~partial.swiftmodule /Users/Jon/Library/Developer/Xcode/DerivedData/fileprivate_Protocol_Crash-abhdfahmyannftfzmymhqhmbusbh/Build/Intermediates/fileprivate Protocol Crash.build/Debug/fileprivate Protocol Crash.build/Objects-normal/x86_64/A~partial.swiftmodule -parse-as-library -target x86_64-apple-macosx10.11 -enable-objc-interop -sdk /Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk -I /Users/Jon/Library/Developer/Xcode/DerivedData/fileprivate_Protocol_Crash-abhdfahmyannftfzmymhqhmbusbh/Build/Products/Debug -F /Users/Jon/Library/Developer/Xcode/DerivedData/fileprivate_Protocol_Crash-abhdfahmyannftfzmymhqhmbusbh/Build/Products/Debug -enable-testing -g -module-cache-path /Users/Jon/Library/Developer/Xcode/DerivedData/ModuleCache -serialize-debugging-options -Xcc -I/Users/Jon/Library/Developer/Xcode/DerivedData/fileprivate_Protocol_Crash-abhdfahmyannftfzmymhqhmbusbh/Build/Intermediates/fileprivate Protocol Crash.build/Debug/fileprivate Protocol Crash.build/swift-overrides.hmap -Xcc -iquote -Xcc /Users/Jon/Library/Developer/Xcode/DerivedData/fileprivate_Protocol_Crash-abhdfahmyannftfzmymhqhmbusbh/Build/Intermediates/fileprivate Protocol Crash.build/Debug/fileprivate Protocol Crash.build/fileprivate Protocol Crash-generated-files.hmap -Xcc -I/Users/Jon/Library/Developer/Xcode/DerivedData/fileprivate_Protocol_Crash-abhdfahmyannftfzmymhqhmbusbh/Build/Intermediates/fileprivate Protocol Crash.build/Debug/fileprivate Protocol Crash.build/fileprivate Protocol Crash-own-target-headers.hmap -Xcc -I/Users/Jon/Library/Developer/Xcode/DerivedData/fileprivate_Protocol_Crash-abhdfahmyannftfzmymhqhmbusbh/Build/Intermediates/fileprivate Protocol Crash.build/Debug/fileprivate Protocol Crash.build/fileprivate Protocol Crash-all-target-headers.hmap -Xcc -iquote -Xcc /Users/Jon/Library/Developer/Xcode/DerivedData/fileprivate_Protocol_Crash-abhdfahmyannftfzmymhqhmbusbh/Build/Intermediates/fileprivate Protocol Crash.build/Debug/fileprivate Protocol Crash.build/fileprivate Protocol Crash-project-headers.hmap -Xcc -I/Users/Jon/Library/Developer/Xcode/DerivedData/fileprivate_Protocol_Crash-abhdfahmyannftfzmymhqhmbusbh/Build/Products/Debug/include -Xcc -I/Users/Jon/Library/Developer/Xcode/DerivedData/fileprivate_Protocol_Crash-abhdfahmyannftfzmymhqhmbusbh/Build/Intermediates/fileprivate Protocol Crash.build/Debug/fileprivate Protocol Crash.build/DerivedSources/x86_64 -Xcc -I/Users/Jon/Library/Developer/Xcode/DerivedData/fileprivate_Protocol_Crash-abhdfahmyannftfzmymhqhmbusbh/Build/Intermediates/fileprivate Protocol Crash.build/Debug/fileprivate Protocol Crash.build/DerivedSources -Xcc -DDEBUG=1 -Xcc -working-directory/Users/Jon/Work/iOS Play/fileprivate Protocol Crash -emit-module-doc-path /Users/Jon/Library/Developer/Xcode/DerivedData/fileprivate_Protocol_Crash-abhdfahmyannftfzmymhqhmbusbh/Build/Intermediates/fileprivate Protocol Crash.build/Debug/fileprivate Protocol Crash.build/Objects-normal/x86_64/fileprivate_Protocol_Crash.swiftdoc -module-name fileprivate_Protocol_Crash -emit-objc-header-path /Users/Jon/Library/Developer/Xcode/DerivedData/fileprivate_Protocol_Crash-abhdfahmyannftfzmymhqhmbusbh/Build/Intermediates/fileprivate Protocol Crash.build/Debug/fileprivate Protocol Crash.build/Objects-normal/x86_64/fileprivate_Protocol_Crash-Swift.h -o /Users/Jon/Library/Developer/Xcode/DerivedData/fileprivate_Protocol_Crash-abhdfahmyannftfzmymhqhmbusbh/Build/Intermediates/fileprivate Protocol Crash.build/Debug/fileprivate Protocol Crash.build/Objects-normal/x86_64/fileprivate_Protocol_Crash.swiftmodule 
1.  While loading conformances for 'B' at <invalid loc>

A minimal demonstration Xcode project with the code above is attached

@swift-ci
Copy link
Collaborator Author

Comment by Jon Colverson (JIRA)

The current trunk snapshot toolchain (swift-DEVELOPMENT-SNAPSHOT-2016-08-15-a.xctoolchain) also crashes, but with a more useful assertion failure:

Assertion failed: ((!FileContext || issue != Status::Malformed) && "error deserializing an individual record"), function error, file /Users/buildnode/jenkins/workspace/oss-swift-package-osx/swift/include/swift/Serialization/ModuleFile.h, line 367.
0  swift                    0x0000000109aad28b llvm::sys::PrintStackTrace(llvm::raw_ostream&) + 43
1  swift                    0x0000000109aac4d6 llvm::sys::RunSignalHandlers() + 70
2  swift                    0x0000000109aad9df SignalHandler(int) + 383
3  libsystem_platform.dylib 0x00007fff990cd52a _sigtramp + 26
4  libsystem_platform.dylib 0x00007fff6b4d7ac5 _sigtramp + 3527452085
5  swift                    0x0000000109aad72e abort + 14
6  swift                    0x0000000109aad711 __assert_rtn + 81
7  swift                    0x00000001073e4496 swift::ModuleFile::resolveCrossReference(swift::ModuleDecl*, unsigned int) + 5766
8  swift                    0x00000001073d7d33 swift::ModuleFile::getDecl(llvm::PointerEmbeddedInt<unsigned int, 31>, llvm::Optional<swift::DeclContext*>) + 15891
9  swift                    0x00000001073e00b2 swift::ModuleFile::readConformance(llvm::BitstreamCursor&) + 386
10 swift                    0x00000001073e01d1 swift::ModuleFile::readConformance(llvm::BitstreamCursor&) + 673
11 swift                    0x00000001073e653b swift::ModuleFile::loadAllConformances(swift::Decl const*, unsigned long long, llvm::SmallVectorImpl<swift::ProtocolConformance*>&) + 267
12 swift                    0x000000010779514e swift::ConformanceLookupTable::updateLookupTable(swift::NominalTypeDecl*, swift::ConformanceLookupTable::ConformanceStage, swift::LazyResolver*) + 174
13 swift                    0x00000001077951b7 swift::ConformanceLookupTable::updateLookupTable(swift::NominalTypeDecl*, swift::ConformanceLookupTable::ConformanceStage, swift::LazyResolver*) + 279
14 swift                    0x0000000107795633 swift::ConformanceLookupTable::updateLookupTable(swift::NominalTypeDecl*, swift::ConformanceLookupTable::ConformanceStage, swift::LazyResolver*) + 1427
15 swift                    0x0000000107798f81 swift::ConformanceLookupTable::getAllProtocols(swift::NominalTypeDecl*, swift::LazyResolver*, llvm::SmallVectorImpl<swift::ProtocolDecl*>&) + 33
16 swift                    0x00000001077fbd5b swift::NominalTypeDecl::getAllProtocols() const + 107
17 swift                    0x0000000107059dd3 (anonymous namespace)::NominalTypeWalker::walkToDeclPre(swift::Decl*) + 67
18 swift                    0x000000010772f83d (anonymous namespace)::Traversal::doIt(swift::Decl*) + 141
19 swift                    0x000000010772f79b swift::Decl::walk(swift::ASTWalker&) + 27
20 swift                    0x000000010705977b swift::ClassHierarchyAnalysis::init() + 155
21 swift                    0x000000010704ccb9 swift::createClassHierarchyAnalysis(swift::SILModule*) + 153
22 swift                    0x00000001070f5404 swift::SILPassManager::SILPassManager(swift::SILModule*, llvm::StringRef) + 372
23 swift                    0x0000000107102cc2 swift::runSILDiagnosticPasses(swift::SILModule&) + 130
24 swift                    0x0000000106deeec2 swift::performFrontend(llvm::ArrayRef<char const*>, char const*, void*, swift::FrontendObserver*) + 6882
25 swift                    0x0000000106dae200 main + 2544
26 libdyld.dylib            0x00007fff8a3905ad start + 1
Stack dump:
0.  Program arguments: /Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2016-08-15-a.xctoolchain/usr/bin/swift -frontend -emit-module /Users/Jon/Library/Developer/Xcode/DerivedData/fileprivate_Protocol_Crash-abhdfahmyannftfzmymhqhmbusbh/Build/Intermediates/fileprivate Protocol Crash.build/Debug/fileprivate Protocol Crash.build/Objects-normal/x86_64/main~partial.swiftmodule /Users/Jon/Library/Developer/Xcode/DerivedData/fileprivate_Protocol_Crash-abhdfahmyannftfzmymhqhmbusbh/Build/Intermediates/fileprivate Protocol Crash.build/Debug/fileprivate Protocol Crash.build/Objects-normal/x86_64/A~partial.swiftmodule -parse-as-library -target x86_64-apple-macosx10.11 -enable-objc-interop -sdk /Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk -I /Users/Jon/Library/Developer/Xcode/DerivedData/fileprivate_Protocol_Crash-abhdfahmyannftfzmymhqhmbusbh/Build/Products/Debug -F /Users/Jon/Library/Developer/Xcode/DerivedData/fileprivate_Protocol_Crash-abhdfahmyannftfzmymhqhmbusbh/Build/Products/Debug -enable-testing -g -module-cache-path /Users/Jon/Library/Developer/Xcode/DerivedData/ModuleCache -serialize-debugging-options -Xcc -I/Users/Jon/Library/Developer/Xcode/DerivedData/fileprivate_Protocol_Crash-abhdfahmyannftfzmymhqhmbusbh/Build/Intermediates/fileprivate Protocol Crash.build/Debug/fileprivate Protocol Crash.build/swift-overrides.hmap -Xcc -iquote -Xcc /Users/Jon/Library/Developer/Xcode/DerivedData/fileprivate_Protocol_Crash-abhdfahmyannftfzmymhqhmbusbh/Build/Intermediates/fileprivate Protocol Crash.build/Debug/fileprivate Protocol Crash.build/fileprivate Protocol Crash-generated-files.hmap -Xcc -I/Users/Jon/Library/Developer/Xcode/DerivedData/fileprivate_Protocol_Crash-abhdfahmyannftfzmymhqhmbusbh/Build/Intermediates/fileprivate Protocol Crash.build/Debug/fileprivate Protocol Crash.build/fileprivate Protocol Crash-own-target-headers.hmap -Xcc -I/Users/Jon/Library/Developer/Xcode/DerivedData/fileprivate_Protocol_Crash-abhdfahmyannftfzmymhqhmbusbh/Build/Intermediates/fileprivate Protocol Crash.build/Debug/fileprivate Protocol Crash.build/fileprivate Protocol Crash-all-target-headers.hmap -Xcc -iquote -Xcc /Users/Jon/Library/Developer/Xcode/DerivedData/fileprivate_Protocol_Crash-abhdfahmyannftfzmymhqhmbusbh/Build/Intermediates/fileprivate Protocol Crash.build/Debug/fileprivate Protocol Crash.build/fileprivate Protocol Crash-project-headers.hmap -Xcc -I/Users/Jon/Library/Developer/Xcode/DerivedData/fileprivate_Protocol_Crash-abhdfahmyannftfzmymhqhmbusbh/Build/Products/Debug/include -Xcc -I/Users/Jon/Library/Developer/Xcode/DerivedData/fileprivate_Protocol_Crash-abhdfahmyannftfzmymhqhmbusbh/Build/Intermediates/fileprivate Protocol Crash.build/Debug/fileprivate Protocol Crash.build/DerivedSources/x86_64 -Xcc -I/Users/Jon/Library/Developer/Xcode/DerivedData/fileprivate_Protocol_Crash-abhdfahmyannftfzmymhqhmbusbh/Build/Intermediates/fileprivate Protocol Crash.build/Debug/fileprivate Protocol Crash.build/DerivedSources -Xcc -DDEBUG=1 -Xcc -working-directory/Users/Jon/Work/iOS Play/fileprivate Protocol Crash -emit-module-doc-path /Users/Jon/Library/Developer/Xcode/DerivedData/fileprivate_Protocol_Crash-abhdfahmyannftfzmymhqhmbusbh/Build/Intermediates/fileprivate Protocol Crash.build/Debug/fileprivate Protocol Crash.build/Objects-normal/x86_64/fileprivate_Protocol_Crash.swiftdoc -module-name fileprivate_Protocol_Crash -emit-objc-header-path /Users/Jon/Library/Developer/Xcode/DerivedData/fileprivate_Protocol_Crash-abhdfahmyannftfzmymhqhmbusbh/Build/Intermediates/fileprivate Protocol Crash.build/Debug/fileprivate Protocol Crash.build/Objects-normal/x86_64/fileprivate_Protocol_Crash-Swift.h -o /Users/Jon/Library/Developer/Xcode/DerivedData/fileprivate_Protocol_Crash-abhdfahmyannftfzmymhqhmbusbh/Build/Intermediates/fileprivate Protocol Crash.build/Debug/fileprivate Protocol Crash.build/Objects-normal/x86_64/fileprivate_Protocol_Crash.swiftmodule 
1.  While loading conformances for 'B' at <invalid loc>
2.  While deserializing decl #&#8203;11 (XREF)
3.  Cross-reference to module 'fileprivate_Protocol_Crash'
    ... P

@belkadan
Copy link
Contributor

Eh, not so much; that assertion's a catch-all.

I'm pretty sure this is not a regression—we had the same problem with Swift 2 private.

@belkadan
Copy link
Contributor

That doesn't mean it shouldn't be fixed, of course.

@swift-ci
Copy link
Collaborator Author

Comment by Jon Colverson (JIRA)

Oh I see. Yes, you're right, the 2.3 toolchain fails in the same way when it's private. I looked for dupes but only searched for fileprivate so I'll see if I can find a dupe and close this if there is one.

@belkadan
Copy link
Contributor

I don't think there's another JIRA bug for it yet. I'll look for a Radar later.

@swift-ci
Copy link
Collaborator Author

Comment by Jon Colverson (JIRA)

I couldn't find one. SR-470 looks like it might be related, but doesn't have a clear repro. Thanks!

@swift-ci
Copy link
Collaborator Author

Comment by Mohamed Afifi (JIRA)

I came here from google, I have this issue too.

@slavapestov
Copy link
Member

@swift-ci create

@DougGregor
Copy link
Member

This was fixed by #14473

@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

5 participants