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-3595] Segmentation fault with protocol with associated type and method using Range<String.Index> #46180

Closed
swift-ci opened this issue Jan 10, 2017 · 1 comment
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 serialization Area → compiler: Serialization & deserialization

Comments

@swift-ci
Copy link
Collaborator

Previous ID SR-3595
Radar None
Original Reporter mathew (JIRA User)
Type Bug
Status Resolved
Resolution Done

Attachment: Download

Environment

Xcode Version 8.2.1 (8C1002)
MacOS Version 10.12.2 (16C67)
iOS Deployment target 10.2

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

md5: 8c8e313574560fee9e446226adbb2e12

Issue Description:

I've narrowed this fault down to two triggers.

The first is when I have a protocol and an extension using the protocol in different files.

*This causes segmentation fault: *

// SomeProtocol.swift
import Swift

public protocol ChildType { }

public protocol ParentType {
    associatedtype Child: ChildType    
    func makeChild(range: Range<String.Index>) -> Child
}
// SomeExtension.swift
import Swift

public extension String {
    func children<P, C>(from parents: P...) -> [C] where P: ParentType, C: ChildType, P.Child == C {
        return []
    }
}

Combining the protocol and the extension in the same file prevents the segmentation fault.

*This works: *

// SomeProtocol.swift
import Swift

public protocol ChildType { }

public protocol ParentType {
    associatedtype Child: ChildType    
    func makeChild(range: Range<String.Index>) -> Child
}

public extension String {
    func children<P, C>(from parents: P...) -> [C] where P: ParentType, C: ChildType, P.Child == C {
        return []
    }
}

Interestingly, as I was trying to identify the minimal example that caused the fault, I also found a second trigger associated with the protocol method that uses the type `Range<String.Index>` if I change this to use a different type (String, Bool) then the fault does not occur when the protocol and extension are in separate files.

Here's the log of the fault attempting to build the attached sample project:

MergeSwiftModule normal x86_64 /Users/mat/Library/Developer/Xcode/DerivedData/SegmentationFaultGenericProtocolExtension-fhpzbbhagionhxfmroqlfzwxekuh/Build/Intermediates/SegmentationFaultGenericProtocolExtension.build/Debug-iphonesimulator/SegmentationFaultGenericProtocolExtension.build/Objects-normal/x86_64/SegmentationFaultGenericProtocolExtension.swiftmodule
 cd /Users/mat/Temp/SegmentationFaultGenericProtocolExtension
 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift -frontend -emit-module /Users/mat/Library/Developer/Xcode/DerivedData/SegmentationFaultGenericProtocolExtension-fhpzbbhagionhxfmroqlfzwxekuh/Build/Intermediates/SegmentationFaultGenericProtocolExtension.build/Debug-iphonesimulator/SegmentationFaultGenericProtocolExtension.build/Objects-normal/x86_64/SomeProtocol~partial.swiftmodule /Users/mat/Library/Developer/Xcode/DerivedData/SegmentationFaultGenericProtocolExtension-fhpzbbhagionhxfmroqlfzwxekuh/Build/Intermediates/SegmentationFaultGenericProtocolExtension.build/Debug-iphonesimulator/SegmentationFaultGenericProtocolExtension.build/Objects-normal/x86_64/SomeExtension~partial.swiftmodule -parse-as-library -target x86_64-apple-ios10.2 -enable-objc-interop -sdk /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator10.2.sdk -I /Users/mat/Library/Developer/Xcode/DerivedData/SegmentationFaultGenericProtocolExtension-fhpzbbhagionhxfmroqlfzwxekuh/Build/Products/Debug-iphonesimulator -F /Users/mat/Library/Developer/Xcode/DerivedData/SegmentationFaultGenericProtocolExtension-fhpzbbhagionhxfmroqlfzwxekuh/Build/Products/Debug-iphonesimulator -enable-testing -g -import-underlying-module -module-cache-path /Users/mat/Library/Developer/Xcode/DerivedData/ModuleCache -D DEBUG -serialize-debugging-options -Xcc -I/Users/mat/Library/Developer/Xcode/DerivedData/SegmentationFaultGenericProtocolExtension-fhpzbbhagionhxfmroqlfzwxekuh/Build/Intermediates/SegmentationFaultGenericProtocolExtension.build/Debug-iphonesimulator/SegmentationFaultGenericProtocolExtension.build/swift-overrides.hmap -Xcc -iquote -Xcc /Users/mat/Library/Developer/Xcode/DerivedData/SegmentationFaultGenericProtocolExtension-fhpzbbhagionhxfmroqlfzwxekuh/Build/Intermediates/SegmentationFaultGenericProtocolExtension.build/Debug-iphonesimulator/SegmentationFaultGenericProtocolExtension.build/SegmentationFaultGenericProtocolExtension-generated-files.hmap -Xcc -I/Users/mat/Library/Developer/Xcode/DerivedData/SegmentationFaultGenericProtocolExtension-fhpzbbhagionhxfmroqlfzwxekuh/Build/Intermediates/SegmentationFaultGenericProtocolExtension.build/Debug-iphonesimulator/SegmentationFaultGenericProtocolExtension.build/SegmentationFaultGenericProtocolExtension-own-target-headers.hmap -Xcc -I/Users/mat/Library/Developer/Xcode/DerivedData/SegmentationFaultGenericProtocolExtension-fhpzbbhagionhxfmroqlfzwxekuh/Build/Intermediates/SegmentationFaultGenericProtocolExtension.build/Debug-iphonesimulator/SegmentationFaultGenericProtocolExtension.build/SegmentationFaultGenericProtocolExtension-all-non-framework-target-headers.hmap -Xcc -ivfsoverlay -Xcc /Users/mat/Library/Developer/Xcode/DerivedData/SegmentationFaultGenericProtocolExtension-fhpzbbhagionhxfmroqlfzwxekuh/Build/Intermediates/SegmentationFaultGenericProtocolExtension.build/all-product-headers.yaml -Xcc -iquote -Xcc /Users/mat/Library/Developer/Xcode/DerivedData/SegmentationFaultGenericProtocolExtension-fhpzbbhagionhxfmroqlfzwxekuh/Build/Intermediates/SegmentationFaultGenericProtocolExtension.build/Debug-iphonesimulator/SegmentationFaultGenericProtocolExtension.build/SegmentationFaultGenericProtocolExtension-project-headers.hmap -Xcc -I/Users/mat/Library/Developer/Xcode/DerivedData/SegmentationFaultGenericProtocolExtension-fhpzbbhagionhxfmroqlfzwxekuh/Build/Products/Debug-iphonesimulator/include -Xcc -I/Users/mat/Library/Developer/Xcode/DerivedData/SegmentationFaultGenericProtocolExtension-fhpzbbhagionhxfmroqlfzwxekuh/Build/Intermediates/SegmentationFaultGenericProtocolExtension.build/Debug-iphonesimulator/SegmentationFaultGenericProtocolExtension.build/DerivedSources/x86_64 -Xcc -I/Users/mat/Library/Developer/Xcode/DerivedData/SegmentationFaultGenericProtocolExtension-fhpzbbhagionhxfmroqlfzwxekuh/Build/Intermediates/SegmentationFaultGenericProtocolExtension.build/Debug-iphonesimulator/SegmentationFaultGenericProtocolExtension.build/DerivedSources -Xcc -DDEBUG=1 -Xcc -ivfsoverlay -Xcc /Users/mat/Library/Developer/Xcode/DerivedData/SegmentationFaultGenericProtocolExtension-fhpzbbhagionhxfmroqlfzwxekuh/Build/Intermediates/SegmentationFaultGenericProtocolExtension.build/Debug-iphonesimulator/SegmentationFaultGenericProtocolExtension.build/unextended-module-overlay.yaml -Xcc -working-directory/Users/mat/Temp/SegmentationFaultGenericProtocolExtension -emit-module-doc-path /Users/mat/Library/Developer/Xcode/DerivedData/SegmentationFaultGenericProtocolExtension-fhpzbbhagionhxfmroqlfzwxekuh/Build/Intermediates/SegmentationFaultGenericProtocolExtension.build/Debug-iphonesimulator/SegmentationFaultGenericProtocolExtension.build/Objects-normal/x86_64/SegmentationFaultGenericProtocolExtension.swiftdoc -module-name SegmentationFaultGenericProtocolExtension -emit-objc-header-path /Users/mat/Library/Developer/Xcode/DerivedData/SegmentationFaultGenericProtocolExtension-fhpzbbhagionhxfmroqlfzwxekuh/Build/Intermediates/SegmentationFaultGenericProtocolExtension.build/Debug-iphonesimulator/SegmentationFaultGenericProtocolExtension.build/Objects-normal/x86_64/SegmentationFaultGenericProtocolExtension-Swift.h -o /Users/mat/Library/Developer/Xcode/DerivedData/SegmentationFaultGenericProtocolExtension-fhpzbbhagionhxfmroqlfzwxekuh/Build/Intermediates/SegmentationFaultGenericProtocolExtension.build/Debug-iphonesimulator/SegmentationFaultGenericProtocolExtension.build/Objects-normal/x86_64/SegmentationFaultGenericProtocolExtension.swiftmodule
 
 0  swift                    0x000000010a9303ad PrintStackTraceSignalHandler(void*) + 45
 1  swift                    0x000000010a92fb56 SignalHandler(int) + 790
 2  libsystem_platform.dylib 0x00007fff8fb12bba _sigtramp + 26
 3  libsystem_platform.dylib 0x00007fc23091db01 _sigtramp + 2699079521
 4  swift                    0x000000010835d4d2 swift::GenericSignature::getCanonical(llvm::ArrayRef<swift::GenericTypeParamType*>, llvm::ArrayRef<swift::Requirement>) + 594
 5  swift                    0x0000000108297fac swift::GenericFunctionType::get(swift::GenericSignature*, swift::Type, swift::Type, swift::AnyFunctionType::ExtInfo const&) + 588
 6  swift                    0x0000000107f3d430 swift::ModuleFile::getType(llvm::PointerEmbeddedInt<unsigned int, 31>) + 3520
 7  swift                    0x0000000107f3a2e1 swift::ModuleFile::getDecl(llvm::PointerEmbeddedInt<unsigned int, 31>, llvm::Optional<swift::DeclContext*>) + 39505
 8  swift                    0x0000000107f454a7 swift::ModuleFile::loadAllMembers(swift::Decl*, unsigned long long) + 647
 9  swift                    0x0000000108385dea swift::NominalTypeDecl::lookupDirect(swift::DeclName, bool) + 138
 10 swift                    0x0000000107f3b406 swift::ModuleFile::getDecl(llvm::PointerEmbeddedInt<unsigned int, 31>, llvm::Optional<swift::DeclContext*>) + 43894
 11 swift                    0x0000000107f3c847 swift::ModuleFile::getType(llvm::PointerEmbeddedInt<unsigned int, 31>) + 471
 12 swift                    0x0000000107f3dcee swift::ModuleFile::getType(llvm::PointerEmbeddedInt<unsigned int, 31>) + 5758
 13 swift                    0x0000000107f3cae3 swift::ModuleFile::getType(llvm::PointerEmbeddedInt<unsigned int, 31>) + 1139
 14 swift                    0x0000000107f3cc1a swift::ModuleFile::getType(llvm::PointerEmbeddedInt<unsigned int, 31>) + 1450
 15 swift                    0x0000000107f3e1c8 swift::ModuleFile::getType(llvm::PointerEmbeddedInt<unsigned int, 31>) + 7000
 16 swift                    0x0000000107f3a29a swift::ModuleFile::getDecl(llvm::PointerEmbeddedInt<unsigned int, 31>, llvm::Optional<swift::DeclContext*>) + 39434
 17 swift                    0x0000000107f454a7 swift::ModuleFile::loadAllMembers(swift::Decl*, unsigned long long) + 647
 18 swift                    0x00000001082d806a (anonymous namespace)::Traversal::visitNominalTypeDecl(swift::NominalTypeDecl*) + 314
 19 swift                    0x00000001082d601b (anonymous namespace)::Traversal::doIt(swift::Decl*) + 219
 20 swift                    0x0000000107c8dc2f swift::SILPassManager::SILPassManager(swift::SILModule*, llvm::StringRef) + 1423
 21 swift                    0x0000000107c92cef swift::runSILDiagnosticPasses(swift::SILModule&) + 159
 22 swift                    0x000000010793cf7e performCompile(swift::CompilerInstance&, swift::CompilerInvocation&, llvm::ArrayRef<char const*>, int&, swift::FrontendObserver*) + 19758
 23 swift                    0x00000001079362b3 swift::performFrontend(llvm::ArrayRef<char const*>, char const*, void*, swift::FrontendObserver*) + 17859
 24 swift                    0x00000001078f25cf main + 8239
 25 libdyld.dylib            0x00007fff8f905255 start + 1
 26 libdyld.dylib            0x000000000000003f start + 1886367211
 Stack dump:
 0. Program arguments: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift -frontend -emit-module /Users/mat/Library/Developer/Xcode/DerivedData/SegmentationFaultGenericProtocolExtension-fhpzbbhagionhxfmroqlfzwxekuh/Build/Intermediates/SegmentationFaultGenericProtocolExtension.build/Debug-iphonesimulator/SegmentationFaultGenericProtocolExtension.build/Objects-normal/x86_64/SomeProtocol~partial.swiftmodule /Users/mat/Library/Developer/Xcode/DerivedData/SegmentationFaultGenericProtocolExtension-fhpzbbhagionhxfmroqlfzwxekuh/Build/Intermediates/SegmentationFaultGenericProtocolExtension.build/Debug-iphonesimulator/SegmentationFaultGenericProtocolExtension.build/Objects-normal/x86_64/SomeExtension~partial.swiftmodule -parse-as-library -target x86_64-apple-ios10.2 -enable-objc-interop -sdk /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator10.2.sdk -I /Users/mat/Library/Developer/Xcode/DerivedData/SegmentationFaultGenericProtocolExtension-fhpzbbhagionhxfmroqlfzwxekuh/Build/Products/Debug-iphonesimulator -F /Users/mat/Library/Developer/Xcode/DerivedData/SegmentationFaultGenericProtocolExtension-fhpzbbhagionhxfmroqlfzwxekuh/Build/Products/Debug-iphonesimulator -enable-testing -g -import-underlying-module -module-cache-path /Users/mat/Library/Developer/Xcode/DerivedData/ModuleCache -D DEBUG -serialize-debugging-options -Xcc -I/Users/mat/Library/Developer/Xcode/DerivedData/SegmentationFaultGenericProtocolExtension-fhpzbbhagionhxfmroqlfzwxekuh/Build/Intermediates/SegmentationFaultGenericProtocolExtension.build/Debug-iphonesimulator/SegmentationFaultGenericProtocolExtension.build/swift-overrides.hmap -Xcc -iquote -Xcc /Users/mat/Library/Developer/Xcode/DerivedData/SegmentationFaultGenericProtocolExtension-fhpzbbhagionhxfmroqlfzwxekuh/Build/Intermediates/SegmentationFaultGenericProtocolExtension.build/Debug-iphonesimulator/SegmentationFaultGenericProtocolExtension.build/SegmentationFaultGenericProtocolExtension-generated-files.hmap -Xcc -I/Users/mat/Library/Developer/Xcode/DerivedData/SegmentationFaultGenericProtocolExtension-fhpzbbhagionhxfmroqlfzwxekuh/Build/Intermediates/SegmentationFaultGenericProtocolExtension.build/Debug-iphonesimulator/SegmentationFaultGenericProtocolExtension.build/SegmentationFaultGenericProtocolExtension-own-target-headers.hmap -Xcc -I/Users/mat/Library/Developer/Xcode/DerivedData/SegmentationFaultGenericProtocolExtension-fhpzbbhagionhxfmroqlfzwxekuh/Build/Intermediates/SegmentationFaultGenericProtocolExtension.build/Debug-iphonesimulator/SegmentationFaultGenericProtocolExtension.build/SegmentationFaultGenericProtocolExtension-all-non-framework-target-headers.hmap -Xcc -ivfsoverlay -Xcc /Users/mat/Library/Developer/Xcode/DerivedData/SegmentationFaultGenericProtocolExtension-fhpzbbhagionhxfmroqlfzwxekuh/Build/Intermediates/SegmentationFaultGenericProtocolExtension.build/all-product-headers.yaml -Xcc -iquote -Xcc /Users/mat/Library/Developer/Xcode/DerivedData/SegmentationFaultGenericProtocolExtension-fhpzbbhagionhxfmroqlfzwxekuh/Build/Intermediates/SegmentationFaultGenericProtocolExtension.build/Debug-iphonesimulator/SegmentationFaultGenericProtocolExtension.build/SegmentationFaultGenericProtocolExtension-project-headers.hmap -Xcc -I/Users/mat/Library/Developer/Xcode/DerivedData/SegmentationFaultGenericProtocolExtension-fhpzbbhagionhxfmroqlfzwxekuh/Build/Products/Debug-iphonesimulator/include -Xcc -I/Users/mat/Library/Developer/Xcode/DerivedData/SegmentationFaultGenericProtocolExtension-fhpzbbhagionhxfmroqlfzwxekuh/Build/Intermediates/SegmentationFaultGenericProtocolExtension.build/Debug-iphonesimulator/SegmentationFaultGenericProtocolExtension.build/DerivedSources/x86_64 -Xcc -I/Users/mat/Library/Developer/Xcode/DerivedData/SegmentationFaultGenericProtocolExtension-fhpzbbhagionhxfmroqlfzwxekuh/Build/Intermediates/SegmentationFaultGenericProtocolExtension.build/Debug-iphonesimulator/SegmentationFaultGenericProtocolExtension.build/DerivedSources -Xcc -DDEBUG=1 -Xcc -ivfsoverlay -Xcc /Users/mat/Library/Developer/Xcode/DerivedData/SegmentationFaultGenericProtocolExtension-fhpzbbhagionhxfmroqlfzwxekuh/Build/Intermediates/SegmentationFaultGenericProtocolExtension.build/Debug-iphonesimulator/SegmentationFaultGenericProtocolExtension.build/unextended-module-overlay.yaml -Xcc -working-directory/Users/mat/Temp/SegmentationFaultGenericProtocolExtension -emit-module-doc-path /Users/mat/Library/Developer/Xcode/DerivedData/SegmentationFaultGenericProtocolExtension-fhpzbbhagionhxfmroqlfzwxekuh/Build/Intermediates/SegmentationFaultGenericProtocolExtension.build/Debug-iphonesimulator/SegmentationFaultGenericProtocolExtension.build/Objects-normal/x86_64/SegmentationFaultGenericProtocolExtension.swiftdoc -module-name SegmentationFaultGenericProtocolExtension -emit-objc-header-path /Users/mat/Library/Developer/Xcode/DerivedData/SegmentationFaultGenericProtocolExtension-fhpzbbhagionhxfmroqlfzwxekuh/Build/Intermediates/SegmentationFaultGenericProtocolExtension.build/Debug-iphonesimulator/SegmentationFaultGenericProtocolExtension.build/Objects-normal/x86_64/SegmentationFaultGenericProtocolExtension-Swift.h -o /Users/mat/Library/Developer/Xcode/DerivedData/SegmentationFaultGenericProtocolExtension-fhpzbbhagionhxfmroqlfzwxekuh/Build/Intermediates/SegmentationFaultGenericProtocolExtension.build/Debug-iphonesimulator/SegmentationFaultGenericProtocolExtension.build/Objects-normal/x86_64/SegmentationFaultGenericProtocolExtension.swiftmodule
 1. While loading members for 'ParentType' at <invalid loc>
 2. While deserializing 'makeChild' (FuncDecl #&#8203;6)
 3. While deserializing decl #&#8203;10 (XREF)
 4. Cross-reference to module 'Swift'
    ... String
    ... in an extension in module 'Swift'
    ... Index
 5. While loading members for declaration 0x7fc23121efd0 at <invalid loc>
 6. While deserializing 'children' (FuncDecl #&#8203;33)
@slavapestov
Copy link
Member

No longer crashes in Swift 3.1.

@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 serialization Area → compiler: Serialization & deserialization
Projects
None yet
Development

No branches or pull requests

3 participants