Swift compiler crashes emitting SIP for closure literal inside a generic class

Originator:tmandry
Number:rdar://23383637 Date Originated:Nov 3, 2015
Status:Open Resolved:
Product:Developer Tools Product Version:Xcode Version 7.2 beta (7C46l)
Classification: Reproducible:Always
 
Summary:
I have a literal closure that I'm passing as a C function pointer to a C API. This is happening inside a the init method of a generic class. The compiler crashes while emitting SIP. It doesn't crash if the class is not generic.

Steps to Reproduce:
1. Install Xcode Version 7.2 beta (7C46l)
2. Create an OS X command-line project and paste the code in main.swift (14 lines)
3. Compile

Expected Results:
Successful compile

Actual Results:
Compiler crashes with errors attached in errors.txt

Version:
Xcode Version 7.2 beta (7C46l)
OS X 10.11.1


---
main.swift
---
import Cocoa

class Observer<ElementType> {
  init() {
    var axObserver: AXObserver?
    let _ = AXObserverCreate(0, {(
      axObserver: AXObserver,
      axElement: AXUIElement,
      notification: CFString,
      userData: UnsafeMutablePointer<Void>) in
      // do nothing
      }, &axObserver)
  }
}

---
errors.txt
---
CompileSwift normal x86_64 /Users/tyler/code/testcase2/testcase2/main.swift
cd /Users/tyler/code/testcase2
/Applications/Xcode-beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift -frontend -c -primary-file /Users/tyler/code/testcase2/testcase2/main.swift -target x86_64-apple-macosx10.11 -enable-objc-interop -sdk /Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk -I /Users/tyler/Library/Developer/Xcode/DerivedData/testcase2-gujsabtuvlwakmakyxkeygwreirz/Build/Products/Debug -F /Users/tyler/Library/Developer/Xcode/DerivedData/testcase2-gujsabtuvlwakmakyxkeygwreirz/Build/Products/Debug -enable-testing -g -module-cache-path /Users/tyler/Library/Developer/Xcode/DerivedData/ModuleCache -serialize-debugging-options -Xcc -I/Users/tyler/Library/Developer/Xcode/DerivedData/testcase2-gujsabtuvlwakmakyxkeygwreirz/Build/Intermediates/testcase2.build/Debug/testcase2.build/swift-overrides.hmap -Xcc -iquote -Xcc /Users/tyler/Library/Developer/Xcode/DerivedData/testcase2-gujsabtuvlwakmakyxkeygwreirz/Build/Intermediates/testcase2.build/Debug/testcase2.build/testcase2-generated-files.hmap -Xcc -I/Users/tyler/Library/Developer/Xcode/DerivedData/testcase2-gujsabtuvlwakmakyxkeygwreirz/Build/Intermediates/testcase2.build/Debug/testcase2.build/testcase2-own-target-headers.hmap -Xcc -I/Users/tyler/Library/Developer/Xcode/DerivedData/testcase2-gujsabtuvlwakmakyxkeygwreirz/Build/Intermediates/testcase2.build/Debug/testcase2.build/testcase2-all-target-headers.hmap -Xcc -iquote -Xcc /Users/tyler/Library/Developer/Xcode/DerivedData/testcase2-gujsabtuvlwakmakyxkeygwreirz/Build/Intermediates/testcase2.build/Debug/testcase2.build/testcase2-project-headers.hmap -Xcc -I/Users/tyler/Library/Developer/Xcode/DerivedData/testcase2-gujsabtuvlwakmakyxkeygwreirz/Build/Products/Debug/include -Xcc -I/Users/tyler/Library/Developer/Xcode/DerivedData/testcase2-gujsabtuvlwakmakyxkeygwreirz/Build/Intermediates/testcase2.build/Debug/testcase2.build/DerivedSources/x86_64 -Xcc -I/Users/tyler/Library/Developer/Xcode/DerivedData/testcase2-gujsabtuvlwakmakyxkeygwreirz/Build/Intermediates/testcase2.build/Debug/testcase2.build/DerivedSources -Xcc -DDEBUG=1 -Xcc -working-directory/Users/tyler/code/testcase2 -emit-module-doc-path /Users/tyler/Library/Developer/Xcode/DerivedData/testcase2-gujsabtuvlwakmakyxkeygwreirz/Build/Intermediates/testcase2.build/Debug/testcase2.build/Objects-normal/x86_64/main~partial.swiftdoc -Onone -module-name testcase2 -emit-module-path /Users/tyler/Library/Developer/Xcode/DerivedData/testcase2-gujsabtuvlwakmakyxkeygwreirz/Build/Intermediates/testcase2.build/Debug/testcase2.build/Objects-normal/x86_64/main~partial.swiftmodule -serialize-diagnostics-path /Users/tyler/Library/Developer/Xcode/DerivedData/testcase2-gujsabtuvlwakmakyxkeygwreirz/Build/Intermediates/testcase2.build/Debug/testcase2.build/Objects-normal/x86_64/main.dia -emit-dependencies-path /Users/tyler/Library/Developer/Xcode/DerivedData/testcase2-gujsabtuvlwakmakyxkeygwreirz/Build/Intermediates/testcase2.build/Debug/testcase2.build/Objects-normal/x86_64/main.d -emit-reference-dependencies-path /Users/tyler/Library/Developer/Xcode/DerivedData/testcase2-gujsabtuvlwakmakyxkeygwreirz/Build/Intermediates/testcase2.build/Debug/testcase2.build/Objects-normal/x86_64/main.swiftdeps -o /Users/tyler/Library/Developer/Xcode/DerivedData/testcase2-gujsabtuvlwakmakyxkeygwreirz/Build/Intermediates/testcase2.build/Debug/testcase2.build/Objects-normal/x86_64/main.o

0  swift                    0x0000000110db9f7b llvm::sys::PrintStackTrace(__sFILE*) + 43
1  swift                    0x0000000110dba6bb SignalHandler(int) + 379
2  libsystem_platform.dylib 0x00007fff86b4052a _sigtramp + 26
3  libsystem_platform.dylib 0x0000001d00726573 _sigtramp + 2042519651
4  swift                    0x000000010ef87b7b swift::irgen::emitPolymorphicArguments(swift::irgen::IRGenFunction&, swift::CanTypeWrapper<swift::SILFunctionType>, swift::CanTypeWrapper<swift::SILFunctionType>, llvm::ArrayRef<swift::Substitution>, swift::irgen::WitnessMetadata*, swift::irgen::Explosion&) + 587
5  swift                    0x000000010efd477c (anonymous namespace)::IRGenSILFunction::visitFullApplySite(swift::FullApplySite) + 2172
6  swift                    0x000000010efc627d swift::irgen::IRGenModule::emitSILFunction(swift::SILFunction*) + 10973
7  swift                    0x000000010ef2c923 swift::irgen::IRGenModuleDispatcher::emitLazyDefinitions() + 307
8  swift                    0x000000010efacd6a performIRGeneration(swift::IRGenOptions&, swift::ModuleDecl*, swift::SILModule*, llvm::StringRef, llvm::LLVMContext&, swift::SourceFile*, unsigned int) + 1034
9  swift                    0x000000010efad100 swift::performIRGeneration(swift::IRGenOptions&, swift::SourceFile&, swift::SILModule*, llvm::StringRef, llvm::LLVMContext&, unsigned int) + 64
10 swift                    0x000000010eeabb35 performCompile(swift::CompilerInstance&, swift::CompilerInvocation&, llvm::ArrayRef<char const*>, int&) + 13701
11 swift                    0x000000010eea83a3 frontend_main(llvm::ArrayRef<char const*>, char const*, void*) + 2691
12 swift                    0x000000010eea4a24 main + 2324
13 libdyld.dylib            0x00007fff927d95ad start + 1
14 libdyld.dylib            0x000000000000003a start + 1837263502
Stack dump:
0.	Program arguments: /Applications/Xcode-beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift -frontend -c -primary-file /Users/tyler/code/testcase2/testcase2/main.swift -target x86_64-apple-macosx10.11 -enable-objc-interop -sdk /Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk -I /Users/tyler/Library/Developer/Xcode/DerivedData/testcase2-gujsabtuvlwakmakyxkeygwreirz/Build/Products/Debug -F /Users/tyler/Library/Developer/Xcode/DerivedData/testcase2-gujsabtuvlwakmakyxkeygwreirz/Build/Products/Debug -enable-testing -g -module-cache-path /Users/tyler/Library/Developer/Xcode/DerivedData/ModuleCache -serialize-debugging-options -Xcc -I/Users/tyler/Library/Developer/Xcode/DerivedData/testcase2-gujsabtuvlwakmakyxkeygwreirz/Build/Intermediates/testcase2.build/Debug/testcase2.build/swift-overrides.hmap -Xcc -iquote -Xcc /Users/tyler/Library/Developer/Xcode/DerivedData/testcase2-gujsabtuvlwakmakyxkeygwreirz/Build/Intermediates/testcase2.build/Debug/testcase2.build/testcase2-generated-files.hmap -Xcc -I/Users/tyler/Library/Developer/Xcode/DerivedData/testcase2-gujsabtuvlwakmakyxkeygwreirz/Build/Intermediates/testcase2.build/Debug/testcase2.build/testcase2-own-target-headers.hmap -Xcc -I/Users/tyler/Library/Developer/Xcode/DerivedData/testcase2-gujsabtuvlwakmakyxkeygwreirz/Build/Intermediates/testcase2.build/Debug/testcase2.build/testcase2-all-target-headers.hmap -Xcc -iquote -Xcc /Users/tyler/Library/Developer/Xcode/DerivedData/testcase2-gujsabtuvlwakmakyxkeygwreirz/Build/Intermediates/testcase2.build/Debug/testcase2.build/testcase2-project-headers.hmap -Xcc -I/Users/tyler/Library/Developer/Xcode/DerivedData/testcase2-gujsabtuvlwakmakyxkeygwreirz/Build/Products/Debug/include -Xcc -I/Users/tyler/Library/Developer/Xcode/DerivedData/testcase2-gujsabtuvlwakmakyxkeygwreirz/Build/Intermediates/testcase2.build/Debug/testcase2.build/DerivedSources/x86_64 -Xcc -I/Users/tyler/Library/Developer/Xcode/DerivedData/testcase2-gujsabtuvlwakmakyxkeygwreirz/Build/Intermediates/testcase2.build/Debug/testcase2.build/DerivedSources -Xcc -DDEBUG=1 -Xcc -working-directory/Users/tyler/code/testcase2 -emit-module-doc-path /Users/tyler/Library/Developer/Xcode/DerivedData/testcase2-gujsabtuvlwakmakyxkeygwreirz/Build/Intermediates/testcase2.build/Debug/testcase2.build/Objects-normal/x86_64/main~partial.swiftdoc -Onone -module-name testcase2 -emit-module-path /Users/tyler/Library/Developer/Xcode/DerivedData/testcase2-gujsabtuvlwakmakyxkeygwreirz/Build/Intermediates/testcase2.build/Debug/testcase2.build/Objects-normal/x86_64/main~partial.swiftmodule -serialize-diagnostics-path /Users/tyler/Library/Developer/Xcode/DerivedData/testcase2-gujsabtuvlwakmakyxkeygwreirz/Build/Intermediates/testcase2.build/Debug/testcase2.build/Objects-normal/x86_64/main.dia -emit-dependencies-path /Users/tyler/Library/Developer/Xcode/DerivedData/testcase2-gujsabtuvlwakmakyxkeygwreirz/Build/Intermediates/testcase2.build/Debug/testcase2.build/Objects-normal/x86_64/main.d -emit-reference-dependencies-path /Users/tyler/Library/Developer/Xcode/DerivedData/testcase2-gujsabtuvlwakmakyxkeygwreirz/Build/Intermediates/testcase2.build/Debug/testcase2.build/Objects-normal/x86_64/main.swiftdeps -o /Users/tyler/Library/Developer/Xcode/DerivedData/testcase2-gujsabtuvlwakmakyxkeygwreirz/Build/Intermediates/testcase2.build/Debug/testcase2.build/Objects-normal/x86_64/main.o
1.	While emitting IR SIL function @_TToFFC9testcase28ObservercurFMGS0_q__FT_GS0_q__U_FTCSo10AXObserverCSo11AXUIElementCSo8CFStringGVSs20UnsafeMutablePointerT___T_ for expression at [/Users/tyler/code/testcase2/testcase2/main.swift:6:33 - line:12:7] RangeText="{(
axObserver: AXObserver,
axElement: AXUIElement,
notification: CFString,
userData: UnsafeMutablePointer<Void>) in
// do nothing
}"

Comments


Please note: Reports posted here will not necessarily be seen by Apple. All problems should be submitted at bugreport.apple.com before they are posted here. Please only post information for Radars that you have filed yourself, and please do not include Apple confidential information in your posts. Thank you!