swiftlang / swift

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

[SR-2227] Cannot conform to ObjC protocols with NSDictionary as argument #44834

Closed colemancda closed 6 years ago

colemancda commented 8 years ago
Previous ID SR-2227
Radar rdar://problem/27628810
Original Reporter @colemancda
Type Bug
Status Resolved
Resolution Done
Environment macOS Sierra Xcode 8 b3, Swift 07-29-2016
Additional Detail from JIRA | | | |------------------|-----------------| |Votes | 0 | |Component/s | Compiler | |Labels | Bug, PrintAsObjC | |Assignee | @jckarter | |Priority | Medium | md5: 2594c951ea245c77b72bd943e7ef49ba

relates to:

Issue Description:

Cannot compile any iOS application due to Swift compiler crashing when compiling a Swift class that conforms to an ObjC protocol that contains NSDictionary as an argument.

Case:

import UIKit

@UIApplicationMain
final class AppDelegate: UIResponder, UIApplicationDelegate, UISplitViewControllerDelegate {

var window: UIWindow?

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [AnyHashable : Any]?) -> Bool { return true }

Compiler crashes with segmentation fault 11:

1. While generating Objective-C header

  1. While printing 'AppDelegate' at \<invalid loc>
  2. While printing type '[AnyHashable : Any]?'
  3. While printing NULL type!
colemancda commented 8 years ago

Another case:

Checkout my project on Github https://github.com/PureSwift/GATT/commit/1c362c92b318e7bf1d5223483a1d454870df7a44

The compiler crashes with segmentation fault 11 due to NSDictionary imported at [String: Any]

DarwinCentral.swift: LOC 344:

@objc(centralManager:didDiscoverPeripheral:advertisementData:RSSI:) public func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber)

Compiler Crash:

MergeSwiftModule normal x86_64 /Users/coleman/Library/Developer/Xcode/DerivedData/GATT-fcorxmspgiyravdwwgowejzbumwp/Build/Intermediates/GATT.build/Debug/GATT OS X.build/Objects-normal/x86_64/GATT.swiftmodule cd /Users/coleman/Developer/GATT/Xcode /Applications/Xcode-beta.app/Contents/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2016-07-29-a.xctoolchain/usr/bin/swift -frontend -emit-module "/Users/coleman/Library/Developer/Xcode/DerivedData/GATT-fcorxmspgiyravdwwgowejzbumwp/Build/Intermediates/GATT.build/Debug/GATT OS X.build/Objects-normal/x86_64/Central~partial.swiftmodule" "/Users/coleman/Library/Developer/Xcode/DerivedData/GATT-fcorxmspgiyravdwwgowejzbumwp/Build/Intermediates/GATT.build/Debug/GATT OS X.build/Objects-normal/x86_64/DarwinAttributes~partial.swiftmodule" "/Users/coleman/Library/Developer/Xcode/DerivedData/GATT-fcorxmspgiyravdwwgowejzbumwp/Build/Intermediates/GATT.build/Debug/GATT OS X.build/Objects-normal/x86_64/LinuxPeripheral~partial.swiftmodule" "/Users/coleman/Library/Developer/Xcode/DerivedData/GATT-fcorxmspgiyravdwwgowejzbumwp/Build/Intermediates/GATT.build/Debug/GATT OS X.build/Objects-normal/x86_64/Peer~partial.swiftmodule" "/Users/coleman/Library/Developer/Xcode/DerivedData/GATT-fcorxmspgiyravdwwgowejzbumwp/Build/Intermediates/GATT.build/Debug/GATT OS X.build/Objects-normal/x86_64/DarwinPeripheral~partial.swiftmodule" "/Users/coleman/Library/Developer/Xcode/DerivedData/GATT-fcorxmspgiyravdwwgowejzbumwp/Build/Intermediates/GATT.build/Debug/GATT OS X.build/Objects-normal/x86_64/DarwinCentral~partial.swiftmodule" "/Users/coleman/Library/Developer/Xcode/DerivedData/GATT-fcorxmspgiyravdwwgowejzbumwp/Build/Intermediates/GATT.build/Debug/GATT OS X.build/Objects-normal/x86_64/Peripheral~partial.swiftmodule" "/Users/coleman/Library/Developer/Xcode/DerivedData/GATT-fcorxmspgiyravdwwgowejzbumwp/Build/Intermediates/GATT.build/Debug/GATT OS X.build/Objects-normal/x86_64/Beacon~partial.swiftmodule" -parse-as-library -target x86_64-apple-macosx10.10 -enable-objc-interop -sdk /Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk -I /Users/coleman/Library/Developer/Xcode/DerivedData/GATT-fcorxmspgiyravdwwgowejzbumwp/Build/Products/Debug -F /Users/coleman/Library/Developer/Xcode/DerivedData/GATT-fcorxmspgiyravdwwgowejzbumwp/Build/Products/Debug -F /Users/coleman/Developer/GATT/Xcode/../Carthage/Build/Mac -enable-testing -g -import-underlying-module -module-cache-path /Users/coleman/Library/Developer/Xcode/DerivedData/ModuleCache -D XcodeLinux -serialize-debugging-options -Xcc "-I/Users/coleman/Library/Developer/Xcode/DerivedData/GATT-fcorxmspgiyravdwwgowejzbumwp/Build/Intermediates/GATT.build/Debug/GATT OS X.build/swift-overrides.hmap" -Xcc -iquote -Xcc "/Users/coleman/Library/Developer/Xcode/DerivedData/GATT-fcorxmspgiyravdwwgowejzbumwp/Build/Intermediates/GATT.build/Debug/GATT OS X.build/GATT-generated-files.hmap" -Xcc "-I/Users/coleman/Library/Developer/Xcode/DerivedData/GATT-fcorxmspgiyravdwwgowejzbumwp/Build/Intermediates/GATT.build/Debug/GATT OS X.build/GATT-own-target-headers.hmap" -Xcc "-I/Users/coleman/Library/Developer/Xcode/DerivedData/GATT-fcorxmspgiyravdwwgowejzbumwp/Build/Intermediates/GATT.build/Debug/GATT OS X.build/GATT-all-non-framework-target-headers.hmap" -Xcc -ivfsoverlay -Xcc /Users/coleman/Library/Developer/Xcode/DerivedData/GATT-fcorxmspgiyravdwwgowejzbumwp/Build/Intermediates/GATT.build/all-product-headers.yaml -Xcc -iquote -Xcc "/Users/coleman/Library/Developer/Xcode/DerivedData/GATT-fcorxmspgiyravdwwgowejzbumwp/Build/Intermediates/GATT.build/Debug/GATT OS X.build/GATT-project-headers.hmap" -Xcc -I/Users/coleman/Library/Developer/Xcode/DerivedData/GATT-fcorxmspgiyravdwwgowejzbumwp/Build/Products/Debug/include -Xcc "-I/Users/coleman/Library/Developer/Xcode/DerivedData/GATT-fcorxmspgiyravdwwgowejzbumwp/Build/Intermediates/GATT.build/Debug/GATT OS X.build/DerivedSources/x86_64" -Xcc "-I/Users/coleman/Library/Developer/Xcode/DerivedData/GATT-fcorxmspgiyravdwwgowejzbumwp/Build/Intermediates/GATT.build/Debug/GATT OS X.build/DerivedSources" -Xcc -DDEBUG=1 -Xcc -ivfsoverlay -Xcc "/Users/coleman/Library/Developer/Xcode/DerivedData/GATT-fcorxmspgiyravdwwgowejzbumwp/Build/Intermediates/GATT.build/Debug/GATT OS X.build/unextended-module-overlay.yaml" -Xcc -working-directory/Users/coleman/Developer/GATT/Xcode -emit-module-doc-path "/Users/coleman/Library/Developer/Xcode/DerivedData/GATT-fcorxmspgiyravdwwgowejzbumwp/Build/Intermediates/GATT.build/Debug/GATT OS X.build/Objects-normal/x86_64/GATT.swiftdoc" -module-name GATT -emit-objc-header-path "/Users/coleman/Library/Developer/Xcode/DerivedData/GATT-fcorxmspgiyravdwwgowejzbumwp/Build/Intermediates/GATT.build/Debug/GATT OS X.build/Objects-normal/x86_64/GATT-Swift.h" -o "/Users/coleman/Library/Developer/Xcode/DerivedData/GATT-fcorxmspgiyravdwwgowejzbumwp/Build/Intermediates/GATT.build/Debug/GATT OS X.build/Objects-normal/x86_64/GATT.swiftmodule"

0 swift 0x0000000104a57c0b llvm::sys::PrintStackTrace(llvm::raw_ostream&) + 43 1 swift 0x0000000104a56e56 llvm::sys::RunSignalHandlers() + 70 2 swift 0x0000000104a5835f SignalHandler(int) + 383 3 libsystem_platform.dylib 0x000000010728fd7a _sigtramp + 26 4 libsystem_platform.dylib 0x00007fff5de94480 _sigtramp + 1455441696 5 swift 0x0000000102248200 (anonymous namespace)::ObjCPrinter::print(swift::Type, llvm::Optional, swift::Identifier) + 208 6 swift 0x000000010224d827 (anonymous namespace)::ObjCPrinter::printCollectionElement(swift::Type) + 279 7 swift 0x000000010224d506 (anonymous namespace)::ObjCPrinter::printObjCBridgeableType(swift::NominalTypeDecl const*, swift::ClassDecl const*, llvm::ArrayRef, llvm::Optional) + 550 8 swift 0x0000000102248c7d swift::TypeVisitor<(anonymous namespace)::ObjCPrinter, void, llvm::Optional >::visit(swift::Type, llvm::Optional) + 1725 9 swift 0x0000000102248f56 swift::TypeVisitor<(anonymous namespace)::ObjCPrinter, void, llvm::Optional >::visit(swift::Type, llvm::Optional) + 2454 10 swift 0x0000000102248200 (anonymous namespace)::ObjCPrinter::print(swift::Type, llvm::Optional, swift::Identifier) + 208 11 swift 0x0000000102253df6 (anonymous namespace)::ObjCPrinter::printAbstractFunctionAsMethod(swift::AbstractFunctionDecl*, bool, bool) + 2118 12 swift 0x0000000102253202 (anonymous namespace)::ObjCPrinter::printMembers(swift::IteratorRange) + 338 13 swift 0x0000000102251b70 swift::ASTVisitor<(anonymous namespace)::ObjCPrinter, void, void, void, void, void, void>::visit(swift::Decl*) + 4768 14 swift 0x00000001022441a4 swift::printAsObjC(llvm::raw_ostream&, swift::ModuleDecl*, llvm::StringRef, swift::Accessibility) + 1700 15 swift 0x0000000101db003e printAsObjC(std::1::basic_string<char, std::__1::char_traits, std::1::allocator > const&, swift::ModuleDecl*, llvm::StringRef, bool) + 462 16 swift 0x0000000101daeb6a performCompile(swift::CompilerInstance&, swift::CompilerInvocation&, llvm::ArrayRef<char const*>, int&, swift::FrontendObserver*) + 14746 17 swift 0x0000000101da9eff swift::performFrontend(llvm::ArrayRef<char const*>, char const*, void*, swift::FrontendObserver*) + 2895 18 swift 0x0000000101d6c8d0 main + 2448 19 libdyld.dylib 0x0000000106f4d255 start + 1 20 libdyld.dylib 0x0000000000000047 start + 4178259443 Stack dump:

  1. Program arguments: /Applications/Xcode-beta.app/Contents/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2016-07-29-a.xctoolchain/usr/bin/swift -frontend -emit-module /Users/coleman/Library/Developer/Xcode/DerivedData/GATT-fcorxmspgiyravdwwgowejzbumwp/Build/Intermediates/GATT.build/Debug/GATT OS X.build/Objects-normal/x86_64/Central~partial.swiftmodule /Users/coleman/Library/Developer/Xcode/DerivedData/GATT-fcorxmspgiyravdwwgowejzbumwp/Build/Intermediates/GATT.build/Debug/GATT OS X.build/Objects-normal/x86_64/DarwinAttributes~partial.swiftmodule /Users/coleman/Library/Developer/Xcode/DerivedData/GATT-fcorxmspgiyravdwwgowejzbumwp/Build/Intermediates/GATT.build/Debug/GATT OS X.build/Objects-normal/x86_64/LinuxPeripheral~partial.swiftmodule /Users/coleman/Library/Developer/Xcode/DerivedData/GATT-fcorxmspgiyravdwwgowejzbumwp/Build/Intermediates/GATT.build/Debug/GATT OS X.build/Objects-normal/x86_64/Peer~partial.swiftmodule /Users/coleman/Library/Developer/Xcode/DerivedData/GATT-fcorxmspgiyravdwwgowejzbumwp/Build/Intermediates/GATT.build/Debug/GATT OS X.build/Objects-normal/x86_64/DarwinPeripheral~partial.swiftmodule /Users/coleman/Library/Developer/Xcode/DerivedData/GATT-fcorxmspgiyravdwwgowejzbumwp/Build/Intermediates/GATT.build/Debug/GATT OS X.build/Objects-normal/x86_64/DarwinCentral~partial.swiftmodule /Users/coleman/Library/Developer/Xcode/DerivedData/GATT-fcorxmspgiyravdwwgowejzbumwp/Build/Intermediates/GATT.build/Debug/GATT OS X.build/Objects-normal/x86_64/Peripheral~partial.swiftmodule /Users/coleman/Library/Developer/Xcode/DerivedData/GATT-fcorxmspgiyravdwwgowejzbumwp/Build/Intermediates/GATT.build/Debug/GATT OS X.build/Objects-normal/x86_64/Beacon~partial.swiftmodule -parse-as-library -target x86_64-apple-macosx10.10 -enable-objc-interop -sdk /Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk -I /Users/coleman/Library/Developer/Xcode/DerivedData/GATT-fcorxmspgiyravdwwgowejzbumwp/Build/Products/Debug -F /Users/coleman/Library/Developer/Xcode/DerivedData/GATT-fcorxmspgiyravdwwgowejzbumwp/Build/Products/Debug -F /Users/coleman/Developer/GATT/Xcode/../Carthage/Build/Mac -enable-testing -g -import-underlying-module -module-cache-path /Users/coleman/Library/Developer/Xcode/DerivedData/ModuleCache -D XcodeLinux -serialize-debugging-options -Xcc -I/Users/coleman/Library/Developer/Xcode/DerivedData/GATT-fcorxmspgiyravdwwgowejzbumwp/Build/Intermediates/GATT.build/Debug/GATT OS X.build/swift-overrides.hmap -Xcc -iquote -Xcc /Users/coleman/Library/Developer/Xcode/DerivedData/GATT-fcorxmspgiyravdwwgowejzbumwp/Build/Intermediates/GATT.build/Debug/GATT OS X.build/GATT-generated-files.hmap -Xcc -I/Users/coleman/Library/Developer/Xcode/DerivedData/GATT-fcorxmspgiyravdwwgowejzbumwp/Build/Intermediates/GATT.build/Debug/GATT OS X.build/GATT-own-target-headers.hmap -Xcc -I/Users/coleman/Library/Developer/Xcode/DerivedData/GATT-fcorxmspgiyravdwwgowejzbumwp/Build/Intermediates/GATT.build/Debug/GATT OS X.build/GATT-all-non-framework-target-headers.hmap -Xcc -ivfsoverlay -Xcc /Users/coleman/Library/Developer/Xcode/DerivedData/GATT-fcorxmspgiyravdwwgowejzbumwp/Build/Intermediates/GATT.build/all-product-headers.yaml -Xcc -iquote -Xcc /Users/coleman/Library/Developer/Xcode/DerivedData/GATT-fcorxmspgiyravdwwgowejzbumwp/Build/Intermediates/GATT.build/Debug/GATT OS X.build/GATT-project-headers.hmap -Xcc -I/Users/coleman/Library/Developer/Xcode/DerivedData/GATT-fcorxmspgiyravdwwgowejzbumwp/Build/Products/Debug/include -Xcc -I/Users/coleman/Library/Developer/Xcode/DerivedData/GATT-fcorxmspgiyravdwwgowejzbumwp/Build/Intermediates/GATT.build/Debug/GATT OS X.build/DerivedSources/x86_64 -Xcc -I/Users/coleman/Library/Developer/Xcode/DerivedData/GATT-fcorxmspgiyravdwwgowejzbumwp/Build/Intermediates/GATT.build/Debug/GATT OS X.build/DerivedSources -Xcc -DDEBUG=1 -Xcc -ivfsoverlay -Xcc /Users/coleman/Library/Developer/Xcode/DerivedData/GATT-fcorxmspgiyravdwwgowejzbumwp/Build/Intermediates/GATT.build/Debug/GATT OS X.build/unextended-module-overlay.yaml -Xcc -working-directory/Users/coleman/Developer/GATT/Xcode -emit-module-doc-path /Users/coleman/Library/Developer/Xcode/DerivedData/GATT-fcorxmspgiyravdwwgowejzbumwp/Build/Intermediates/GATT.build/Debug/GATT OS X.build/Objects-normal/x86_64/GATT.swiftdoc -module-name GATT -emit-objc-header-path /Users/coleman/Library/Developer/Xcode/DerivedData/GATT-fcorxmspgiyravdwwgowejzbumwp/Build/Intermediates/GATT.build/Debug/GATT OS X.build/Objects-normal/x86_64/GATT-Swift.h -o /Users/coleman/Library/Developer/Xcode/DerivedData/GATT-fcorxmspgiyravdwwgowejzbumwp/Build/Intermediates/GATT.build/Debug/GATT OS X.build/Objects-normal/x86_64/GATT.swiftmodule
  2. While generating Objective-C header
  3. While printing 'DarwinCentral' at
  4. While printing type '[String : Any]'
  5. While printing NULL type!
belkadan commented 8 years ago

@jckarter, you were going to look at this one, yes?

jckarter commented 8 years ago

Yep, thanks Jordan.

jckarter commented 8 years ago

https://github.com/apple/swift/pull/3918 should address this.