swiftlang / swift

The Swift Programming Language
https://swift.org
Apache License 2.0
67.43k stars 10.34k forks source link

[SR-3073] Reduced example of Swift 3 segmentation fault on Xcode 8.1 GM #45663

Closed JaviSoto closed 7 years ago

JaviSoto commented 7 years ago
Previous ID SR-3073
Radar None
Original Reporter @JaviSoto
Type Bug
Status Resolved
Resolution Done

Attachment: Download

Environment Xcode 8.1 GM
Additional Detail from JIRA | | | |------------------|-----------------| |Votes | 0 | |Component/s | Compiler | |Labels | Bug | |Assignee | @JaviSoto | |Priority | Medium | md5: 6154719c2bc427817e2a44c7e2b0922a

duplicates:

Issue Description:

I haven't put too much thought on whether my code is actually correct yet (since the compiler is crashing instead of pointing me to an issue).

This is the code, but I've attached an Xcode project as well.

Crash.swift:

import Foundation

fileprivate struct Lense<Whole, Part> {
    let set: (inout Whole, Part) -> ()
}

struct MyType {
    var number1: Int
    var number2: Int
}

extension MyType {
    fileprivate func lenses() -> [Lense<MyType, Int>] {
        let lense: Lense<MyType, Int> = Lense(
            set: { $0.number1 = $1 }
        )

        return [lense]
    }
}

The crash:

0  swift                    0x00000001070e8a4d PrintStackTraceSignalHandler(void*) + 45
1  swift                    0x00000001070e8476 SignalHandler(int) + 470
2  libsystem_platform.dylib 0x00007fffddb45bba _sigtramp + 26
3  swift                    0x00000001070bb539 (anonymous namespace)::RawMemoryObject::readBytes(unsigned char*, unsigned long long, unsigned long long) const + 57
4  swift                    0x000000010464dd1e (anonymous namespace)::CallSite::emit(swift::Lowering::SILGenFunction&, swift::Lowering::AbstractionPattern, (anonymous namespace)::ParamLowering&, llvm::SmallVectorImpl<swift::Lowering::ManagedValue>&, llvm::SmallVectorImpl<std::__1::pair<swift::Lowering::LValue, swift::SILLocation> >&, llvm::Optional<swift::ForeignErrorConvention> const&, swift::ImportAsMemberStatus const&) && + 478
5  swift                    0x000000010464a9eb (anonymous namespace)::CallEmission::apply(swift::Lowering::SGFContext) + 5339
6  swift                    0x000000010469a245 swift::ASTVisitor<(anonymous namespace)::RValueEmitter, swift::Lowering::RValue, void, void, void, void, void, swift::Lowering::SGFContext>::visit(swift::Expr*, swift::Lowering::SGFContext) + 117
7  swift                    0x000000010469a063 swift::Lowering::SILGenFunction::emitExprInto(swift::Expr*, swift::Lowering::Initialization*) + 195
8  swift                    0x0000000104687723 swift::Lowering::SILGenFunction::emitPatternBinding(swift::PatternBindingDecl*, unsigned int) + 195
9  swift                    0x000000010463ea2d swift::ASTVisitor<swift::Lowering::SILGenFunction, void, void, void, void, void, void>::visit(swift::Decl*) + 125
10 swift                    0x00000001046f7e09 swift::ASTVisitor<(anonymous namespace)::StmtEmitter, void, void, void, void, void, void>::visit(swift::Stmt*) + 4169
11 swift                    0x00000001046b86fa swift::Lowering::SILGenFunction::emitFunction(swift::FuncDecl*) + 314
12 swift                    0x00000001046349e5 swift::Lowering::SILGenModule::emitFunction(swift::FuncDecl*)::$_1::operator()(swift::SILFunction*) const + 1877
13 swift                    0x0000000104633592 swift::Lowering::SILGenModule::emitFunction(swift::FuncDecl*) + 626
14 swift                    0x00000001046ffda7 swift::Lowering::SILGenModule::visitExtensionDecl(swift::ExtensionDecl*) + 535
15 swift                    0x000000010464032b swift::Lowering::SILGenModule::emitSourceFile(swift::SourceFile*, unsigned int) + 1835
16 swift                    0x0000000104641fbd swift::SILModule::constructSIL(swift::ModuleDecl*, swift::SILOptions&, swift::FileUnit*, llvm::Optional<unsigned int>, bool, bool) + 1629
17 swift                    0x0000000104495cd9 performCompile(swift::CompilerInstance&, swift::CompilerInvocation&, llvm::ArrayRef<char const*>, int&, swift::FrontendObserver*) + 19513
18 swift                    0x000000010448f090 swift::performFrontend(llvm::ArrayRef<char const*>, char const*, void*, swift::FrontendObserver*) + 17856
19 swift                    0x000000010444ba5e main + 8302
20 libdyld.dylib            0x00007fffdd938255 start + 1
Stack dump:
0.  Program arguments: /Applications/Xcode-8.1.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift -frontend -c -primary-file /Users/javiers/Desktop/SwiftCrash/SwiftCrash/Crash.swift -target x86_64-apple-ios10.1 -enable-objc-interop -sdk /Applications/Xcode-8.1.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator10.1.sdk -I /Users/javiers/Library/Developer/Xcode/DerivedData/SwiftCrash-dqamdopidqkeodckagxjvxjfdpxc/Build/Products/Debug-iphonesimulator -F /Users/javiers/Library/Developer/Xcode/DerivedData/SwiftCrash-dqamdopidqkeodckagxjvxjfdpxc/Build/Products/Debug-iphonesimulator -enable-testing -g -import-underlying-module -module-cache-path /Users/javiers/Library/Developer/Xcode/DerivedData/ModuleCache -D DEBUG -serialize-debugging-options -Xcc -I/Users/javiers/Library/Developer/Xcode/DerivedData/SwiftCrash-dqamdopidqkeodckagxjvxjfdpxc/Build/Intermediates/SwiftCrash.build/Debug-iphonesimulator/SwiftCrash.build/swift-overrides.hmap -Xcc -iquote -Xcc /Users/javiers/Library/Developer/Xcode/DerivedData/SwiftCrash-dqamdopidqkeodckagxjvxjfdpxc/Build/Intermediates/SwiftCrash.build/Debug-iphonesimulator/SwiftCrash.build/SwiftCrash-generated-files.hmap -Xcc -I/Users/javiers/Library/Developer/Xcode/DerivedData/SwiftCrash-dqamdopidqkeodckagxjvxjfdpxc/Build/Intermediates/SwiftCrash.build/Debug-iphonesimulator/SwiftCrash.build/SwiftCrash-own-target-headers.hmap -Xcc -I/Users/javiers/Library/Developer/Xcode/DerivedData/SwiftCrash-dqamdopidqkeodckagxjvxjfdpxc/Build/Intermediates/SwiftCrash.build/Debug-iphonesimulator/SwiftCrash.build/SwiftCrash-all-non-framework-target-headers.hmap -Xcc -ivfsoverlay -Xcc /Users/javiers/Library/Developer/Xcode/DerivedData/SwiftCrash-dqamdopidqkeodckagxjvxjfdpxc/Build/Intermediates/SwiftCrash.build/all-product-headers.yaml -Xcc -iquote -Xcc /Users/javiers/Library/Developer/Xcode/DerivedData/SwiftCrash-dqamdopidqkeodckagxjvxjfdpxc/Build/Intermediates/SwiftCrash.build/Debug-iphonesimulator/SwiftCrash.build/SwiftCrash-project-headers.hmap -Xcc -I/Users/javiers/Library/Developer/Xcode/DerivedData/SwiftCrash-dqamdopidqkeodckagxjvxjfdpxc/Build/Products/Debug-iphonesimulator/include -Xcc -I/Users/javiers/Library/Developer/Xcode/DerivedData/SwiftCrash-dqamdopidqkeodckagxjvxjfdpxc/Build/Intermediates/SwiftCrash.build/Debug-iphonesimulator/SwiftCrash.build/DerivedSources/x86_64 -Xcc -I/Users/javiers/Library/Developer/Xcode/DerivedData/SwiftCrash-dqamdopidqkeodckagxjvxjfdpxc/Build/Intermediates/SwiftCrash.build/Debug-iphonesimulator/SwiftCrash.build/DerivedSources -Xcc -DDEBUG=1 -Xcc -ivfsoverlay -Xcc /Users/javiers/Library/Developer/Xcode/DerivedData/SwiftCrash-dqamdopidqkeodckagxjvxjfdpxc/Build/Intermediates/SwiftCrash.build/Debug-iphonesimulator/SwiftCrash.build/unextended-module-overlay.yaml -Xcc -working-directory/Users/javiers/Desktop/SwiftCrash -emit-module-doc-path /Users/javiers/Library/Developer/Xcode/DerivedData/SwiftCrash-dqamdopidqkeodckagxjvxjfdpxc/Build/Intermediates/SwiftCrash.build/Debug-iphonesimulator/SwiftCrash.build/Objects-normal/x86_64/Crash~partial.swiftdoc -Onone -parse-as-library -module-name SwiftCrash -emit-module-path /Users/javiers/Library/Developer/Xcode/DerivedData/SwiftCrash-dqamdopidqkeodckagxjvxjfdpxc/Build/Intermediates/SwiftCrash.build/Debug-iphonesimulator/SwiftCrash.build/Objects-normal/x86_64/Crash~partial.swiftmodule -serialize-diagnostics-path /Users/javiers/Library/Developer/Xcode/DerivedData/SwiftCrash-dqamdopidqkeodckagxjvxjfdpxc/Build/Intermediates/SwiftCrash.build/Debug-iphonesimulator/SwiftCrash.build/Objects-normal/x86_64/Crash.dia -emit-dependencies-path /Users/javiers/Library/Developer/Xcode/DerivedData/SwiftCrash-dqamdopidqkeodckagxjvxjfdpxc/Build/Intermediates/SwiftCrash.build/Debug-iphonesimulator/SwiftCrash.build/Objects-normal/x86_64/Crash.d -emit-reference-dependencies-path /Users/javiers/Library/Developer/Xcode/DerivedData/SwiftCrash-dqamdopidqkeodckagxjvxjfdpxc/Build/Intermediates/SwiftCrash.build/Debug-iphonesimulator/SwiftCrash.build/Objects-normal/x86_64/Crash.swiftdeps -o /Users/javiers/Library/Developer/Xcode/DerivedData/SwiftCrash-dqamdopidqkeodckagxjvxjfdpxc/Build/Intermediates/SwiftCrash.build/Debug-iphonesimulator/SwiftCrash.build/Objects-normal/x86_64/Crash.o 
1.  While emitting SIL for 'lenses' at /Users/javiers/Desktop/SwiftCrash/SwiftCrash/Crash.swift:21:17
DougGregor commented 7 years ago

Explicitly specifying the closure types works around the problem:

set: { (whole: inout MyType, part: Int) in whole.number1 = part }

rudkx commented 7 years ago

Fixed on master with this merge: https://github.com/apple/swift/commit/c04c6c9c61d149b3a46311df770eb70cfaa67bff

Please confirm with a build that has this fix in it and close the issue if you agree the issue is fixed.