// RUN: %target-typecheck-verify-swift -parse-as-library // RUN: %target-typecheck-verify-swift -D WITH_PERFORM -primary-file %s %S/Inputs/can_import_nonprimary_file.swift public struct LibraryDependentBool : ExpressibleByBooleanLiteral { #if canImport(Swift) var _description: String #endif public let magicConstant: Int = { #if canImport(Swift) return 42 #else return "" // Type error #endif }() #if canImport(AppKit) || (canImport(UIKit) && (arch(i386) || arch(arm))) // On OS X and 32-bit iOS, Objective-C's BOOL type is a "signed char". var _value: Int8 init(_ value: Int8) { self._value = value #if canImport(Swift) self._description = "\(value)" #endif } public init(_ value: Bool) { #if canImport(Swift) self._description = value ? "YES" : "NO" #endif self._value = value ? 1 : 0 } #else // Everywhere else it is C/C++'s "Bool" var _value: Bool public init(_ value: Bool) { #if canImport(Swift) self._description = value ? "YES" : "NO" #endif self._value = value } #endif /// The value of `self`, expressed as a `Bool`. public var boolValue: Bool { #if canImport(AppKit) || (canImport(UIKit) && (arch(i386) || arch(arm))) return _value != 0 #else return _value #endif } /// Create an instance initialized to `value`. public init(booleanLiteral value: Bool) { self.init(value) } func withBoolValue(_ f : (Bool) -> ()) { return f(self.boolValue) } } #if canImport(Swift) func topLevelFunction() { LibraryDependentBool(true).withBoolValue { b in let value: String #if canImport(Swiftz) #if canImport(ReactiveCocoa) #if canImport(Darwin) value = NSObject() // Type error #endif #endif #else value = "" #endif print(value) } } #else enum LibraryDependentBool {} // This should not happen #endif #if WITH_PERFORM func performPerOS() -> Int { let value: Int #if canImport(Argo) value = "" // Type error #else value = 42 #endif return performFoo(withX: value, andY: value) } #endif let osName: String = { #if os(iOS) return "iOS" #elseif os(watchOS) return "watchOS" #elseif os(tvOS) return "tvOS" #elseif os(OSX) return "OS X" #elseif os(Linux) return "Linux" #else return "Unknown" #endif }()