diff --git a/cmake/modules/AddSwift.cmake b/cmake/modules/AddSwift.cmake index 64902335dd37e..fd6db69b0ddc0 100644 --- a/cmake/modules/AddSwift.cmake +++ b/cmake/modules/AddSwift.cmake @@ -886,7 +886,7 @@ function(_add_swift_library_single target name) elseif("${SWIFTLIB_SINGLE_SDK}" STREQUAL "CYGWIN") set_target_properties("${target}" PROPERTIES - INSTALL_RPATH "$ORIGIN:/usr/lib/swift/windows") + INSTALL_RPATH "$ORIGIN:/usr/lib/swift/cygwin") endif() set_target_properties("${target}" PROPERTIES BUILD_WITH_INSTALL_RPATH YES) @@ -1256,6 +1256,9 @@ endfunction() # SWIFT_MODULE_DEPENDS_LINUX # Swift modules this library depends on when built for Linux. # +# SWIFT_MODULE_DEPENDS_CYGWIN +# Swift modules this library depends on when built for Cygwin. +# # FRAMEWORK_DEPENDS # System frameworks this library depends on. # @@ -1329,7 +1332,7 @@ function(add_swift_library name) cmake_parse_arguments(SWIFTLIB "${SWIFTLIB_options}" "INSTALL_IN_COMPONENT;DEPLOYMENT_VERSION_OSX;DEPLOYMENT_VERSION_IOS;DEPLOYMENT_VERSION_TVOS;DEPLOYMENT_VERSION_WATCHOS" - "DEPENDS;LINK_LIBRARIES;SWIFT_MODULE_DEPENDS;SWIFT_MODULE_DEPENDS_OSX;SWIFT_MODULE_DEPENDS_IOS;SWIFT_MODULE_DEPENDS_TVOS;SWIFT_MODULE_DEPENDS_WATCHOS;SWIFT_MODULE_DEPENDS_FREEBSD;SWIFT_MODULE_DEPENDS_LINUX;FRAMEWORK_DEPENDS;FRAMEWORK_DEPENDS_WEAK;FRAMEWORK_DEPENDS_OSX;FRAMEWORK_DEPENDS_IOS_TVOS;LLVM_COMPONENT_DEPENDS;FILE_DEPENDS;TARGET_SDKS;C_COMPILE_FLAGS;SWIFT_COMPILE_FLAGS;SWIFT_COMPILE_FLAGS_OSX;SWIFT_COMPILE_FLAGS_IOS;SWIFT_COMPILE_FLAGS_TVOS;SWIFT_COMPILE_FLAGS_WATCHOS;LINK_FLAGS;PRIVATE_LINK_LIBRARIES;INTERFACE_LINK_LIBRARIES;INCORPORATE_OBJECT_LIBRARIES;INCORPORATE_OBJECT_LIBRARIES_SHARED_ONLY" + "DEPENDS;LINK_LIBRARIES;SWIFT_MODULE_DEPENDS;SWIFT_MODULE_DEPENDS_OSX;SWIFT_MODULE_DEPENDS_IOS;SWIFT_MODULE_DEPENDS_TVOS;SWIFT_MODULE_DEPENDS_WATCHOS;SWIFT_MODULE_DEPENDS_FREEBSD;SWIFT_MODULE_DEPENDS_LINUX;SWIFT_MODULE_DEPENDS_CYGWIN;FRAMEWORK_DEPENDS;FRAMEWORK_DEPENDS_WEAK;FRAMEWORK_DEPENDS_OSX;FRAMEWORK_DEPENDS_IOS_TVOS;LLVM_COMPONENT_DEPENDS;FILE_DEPENDS;TARGET_SDKS;C_COMPILE_FLAGS;SWIFT_COMPILE_FLAGS;SWIFT_COMPILE_FLAGS_OSX;SWIFT_COMPILE_FLAGS_IOS;SWIFT_COMPILE_FLAGS_TVOS;SWIFT_COMPILE_FLAGS_WATCHOS;LINK_FLAGS;PRIVATE_LINK_LIBRARIES;INTERFACE_LINK_LIBRARIES;INCORPORATE_OBJECT_LIBRARIES;INCORPORATE_OBJECT_LIBRARIES_SHARED_ONLY" ${ARGN}) set(SWIFTLIB_SOURCES ${SWIFTLIB_UNPARSED_ARGUMENTS}) @@ -1462,6 +1465,9 @@ function(add_swift_library name) elseif("${sdk}" STREQUAL "LINUX" OR "${sdk}" STREQUAL "ANDROID") list(APPEND swiftlib_module_depends_flattened ${SWIFTLIB_SWIFT_MODULE_DEPENDS_LINUX}) + elseif("${sdk}" STREQUAL "CYGWIN") + list(APPEND swiftlib_module_depends_flattened + ${SWIFTLIB_SWIFT_MODULE_DEPENDS_CYGWIN}) endif() # Swift compiles depend on swift modules, while links depend on diff --git a/stdlib/private/StdlibUnittest/CMakeLists.txt b/stdlib/private/StdlibUnittest/CMakeLists.txt index e18d39fd8c330..fb9d19bb37883 100644 --- a/stdlib/private/StdlibUnittest/CMakeLists.txt +++ b/stdlib/private/StdlibUnittest/CMakeLists.txt @@ -38,6 +38,7 @@ add_swift_library(swiftStdlibUnittest ${SWIFT_STDLIB_LIBRARY_BUILD_TYPES} IS_STD SWIFT_MODULE_DEPENDS_WATCHOS Darwin Foundation SWIFT_MODULE_DEPENDS_LINUX Glibc SWIFT_MODULE_DEPENDS_FREEBSD Glibc + SWIFT_MODULE_DEPENDS_CYGWIN Glibc SWIFT_COMPILE_FLAGS ${swift_stdlib_unittest_compile_flags} TARGET_SDKS ALL_POSIX_PLATFORMS INSTALL_IN_COMPONENT stdlib-experimental) diff --git a/stdlib/private/StdlibUnittest/RaceTest.swift b/stdlib/private/StdlibUnittest/RaceTest.swift index ea07016f3c6d2..e53d7762c7161 100644 --- a/stdlib/private/StdlibUnittest/RaceTest.swift +++ b/stdlib/private/StdlibUnittest/RaceTest.swift @@ -41,7 +41,7 @@ import SwiftPrivateLibcExtras import SwiftPrivatePthreadExtras #if os(OSX) || os(iOS) import Darwin -#elseif os(Linux) || os(FreeBSD) || os(PS4) || os(Android) +#elseif os(Linux) || os(FreeBSD) || os(PS4) || os(Android) || CYGWIN import Glibc #endif diff --git a/stdlib/private/StdlibUnittest/StdlibCoreExtras.swift b/stdlib/private/StdlibUnittest/StdlibCoreExtras.swift index 784f075d2af4c..7307e81e9d724 100644 --- a/stdlib/private/StdlibUnittest/StdlibCoreExtras.swift +++ b/stdlib/private/StdlibUnittest/StdlibCoreExtras.swift @@ -14,7 +14,7 @@ import SwiftPrivate import SwiftPrivateLibcExtras #if os(OSX) || os(iOS) import Darwin -#elseif os(Linux) || os(FreeBSD) || os(PS4) || os(Android) +#elseif os(Linux) || os(FreeBSD) || os(PS4) || os(Android) || CYGWIN import Glibc #endif diff --git a/stdlib/private/StdlibUnittest/StdlibUnittest.swift.gyb b/stdlib/private/StdlibUnittest/StdlibUnittest.swift.gyb index 46e61fb3de171..fa6c8cae31f37 100644 --- a/stdlib/private/StdlibUnittest/StdlibUnittest.swift.gyb +++ b/stdlib/private/StdlibUnittest/StdlibUnittest.swift.gyb @@ -20,7 +20,7 @@ import SwiftPrivateLibcExtras #if os(OSX) || os(iOS) || os(watchOS) || os(tvOS) import Darwin -#elseif os(Linux) || os(FreeBSD) || os(PS4) || os(Android) +#elseif os(Linux) || os(FreeBSD) || os(PS4) || os(Android) || CYGWIN import Glibc #endif @@ -1429,6 +1429,8 @@ public enum OSVersion : CustomStringConvertible { case freeBSD case android case ps4 + case windowsCygnus + case windows public var description: String { switch self { @@ -1454,6 +1456,10 @@ public enum OSVersion : CustomStringConvertible { return "PS4" case .android: return "Android" + case .windowsCygnus: + return "Cygwin" + case .windows: + return "Windows" } } } @@ -1492,6 +1498,10 @@ func _getOSVersion() -> OSVersion { return .ps4 #elseif os(Android) return .android +#elseif os(Windows) && CYGWIN + return .windowsCygnus +#elseif os(Windows) + return .windows #else let productVersion = _stdlib_getSystemVersionPlistProperty("ProductVersion")! let (major, minor, bugFix) = _parseDottedVersionTriple(productVersion) @@ -1570,6 +1580,10 @@ public enum TestRunPredicate : CustomStringConvertible { case androidAny(reason: String) + case windowsAny(reason: String) + + case windowsCygnusAny(reason: String) + case objCRuntime(/*reason:*/ String) case nativeRuntime(/*reason:*/ String) @@ -1656,6 +1670,12 @@ public enum TestRunPredicate : CustomStringConvertible { case .ps4Any(reason: let reason): return "ps4Any(*, reason: \(reason))" + case .windowsAny(reason: let reason): + return "windowsAny(*, reason: \(reason))" + + case .windowsCygnusAny(reason: let reason): + return "windowsCygnusAny(*, reason: \(reason))" + case .objCRuntime(let reason): return "Objective-C runtime, reason: \(reason))" case .nativeRuntime(let reason): @@ -1921,6 +1941,24 @@ public enum TestRunPredicate : CustomStringConvertible { return false } + case .windowsAny: + switch _getRunningOSVersion() { + case .windowsCygnus: + return true + case .windows: + return true + default: + return false + } + + case .windowsCygnusAny: + switch _getRunningOSVersion() { + case .windowsCygnus: + return true + default: + return false + } + case .objCRuntime: #if _runtime(_ObjC) return true diff --git a/stdlib/private/SwiftPrivateLibcExtras/CMakeLists.txt b/stdlib/private/SwiftPrivateLibcExtras/CMakeLists.txt index 842a2348db0a2..5381c5aa80641 100644 --- a/stdlib/private/SwiftPrivateLibcExtras/CMakeLists.txt +++ b/stdlib/private/SwiftPrivateLibcExtras/CMakeLists.txt @@ -13,4 +13,5 @@ add_swift_library(swiftSwiftPrivateLibcExtras ${SWIFT_STDLIB_LIBRARY_BUILD_TYPES SWIFT_MODULE_DEPENDS_WATCHOS Darwin SWIFT_MODULE_DEPENDS_LINUX Glibc SWIFT_MODULE_DEPENDS_FREEBSD Glibc + SWIFT_MODULE_DEPENDS_CYGWIN Glibc INSTALL_IN_COMPONENT stdlib-experimental) diff --git a/stdlib/private/SwiftPrivateLibcExtras/Subprocess.swift b/stdlib/private/SwiftPrivateLibcExtras/Subprocess.swift index 1b60d3ed49293..2e240ed400d9b 100644 --- a/stdlib/private/SwiftPrivateLibcExtras/Subprocess.swift +++ b/stdlib/private/SwiftPrivateLibcExtras/Subprocess.swift @@ -13,7 +13,7 @@ import SwiftPrivate #if os(OSX) || os(iOS) || os(watchOS) || os(tvOS) import Darwin -#elseif os(Linux) || os(FreeBSD) || os(PS4) || os(Android) +#elseif os(Linux) || os(FreeBSD) || os(PS4) || os(Android) || CYGWIN import Glibc #endif @@ -264,9 +264,19 @@ public enum ProcessTerminationStatus : CustomStringConvertible { public func posixWaitpid(_ pid: pid_t) -> ProcessTerminationStatus { var status: CInt = 0 +#if CYGWIN + withUnsafeMutablePointer(to: &status) { + statusPtr in + let statusPtrWrapper = __wait_status_ptr_t(__int_ptr: statusPtr) + if waitpid(pid, statusPtrWrapper, 0) < 0 { + preconditionFailure("waitpid() failed") + } + } +#else if waitpid(pid, &status, 0) < 0 { preconditionFailure("waitpid() failed") } +#endif if WIFEXITED(status) { return .exit(Int(WEXITSTATUS(status))) } @@ -290,6 +300,8 @@ internal func _getEnviron() -> UnsafeMutablePointer? return environ #elseif os(Android) return environ +#elseif CYGWIN + return environ #else return __environ #endif diff --git a/stdlib/private/SwiftPrivateLibcExtras/SwiftPrivateLibcExtras.swift b/stdlib/private/SwiftPrivateLibcExtras/SwiftPrivateLibcExtras.swift index 870305d3618c9..2850883eff664 100644 --- a/stdlib/private/SwiftPrivateLibcExtras/SwiftPrivateLibcExtras.swift +++ b/stdlib/private/SwiftPrivateLibcExtras/SwiftPrivateLibcExtras.swift @@ -99,6 +99,9 @@ public func _stdlib_select( let readAddr = readfds.baseAddress let writeAddr = writefds.baseAddress let errorAddr = errorfds.baseAddress +#if CYGWIN + typealias fd_set = _types_fd_set +#endif func asFdSetPtr( _ p: UnsafeMutablePointer? ) -> UnsafeMutablePointer? { diff --git a/stdlib/private/SwiftPrivatePthreadExtras/CMakeLists.txt b/stdlib/private/SwiftPrivatePthreadExtras/CMakeLists.txt index 92ed8064db968..cf867d60287a3 100644 --- a/stdlib/private/SwiftPrivatePthreadExtras/CMakeLists.txt +++ b/stdlib/private/SwiftPrivatePthreadExtras/CMakeLists.txt @@ -10,6 +10,7 @@ add_swift_library(swiftSwiftPrivatePthreadExtras ${SWIFT_STDLIB_LIBRARY_BUILD_TY SWIFT_MODULE_DEPENDS_WATCHOS Darwin SWIFT_MODULE_DEPENDS_LINUX Glibc SWIFT_MODULE_DEPENDS_FREEBSD Glibc + SWIFT_MODULE_DEPENDS_CYGWIN Glibc SWIFT_COMPILE_FLAGS ${STDLIB_SIL_SERIALIZE_ALL} TARGET_SDKS ALL_POSIX_PLATFORMS INSTALL_IN_COMPONENT stdlib-experimental) diff --git a/stdlib/private/SwiftPrivatePthreadExtras/PthreadBarriers.swift b/stdlib/private/SwiftPrivatePthreadExtras/PthreadBarriers.swift index 987ade1013715..2ebe4b3accaf7 100644 --- a/stdlib/private/SwiftPrivatePthreadExtras/PthreadBarriers.swift +++ b/stdlib/private/SwiftPrivatePthreadExtras/PthreadBarriers.swift @@ -12,7 +12,7 @@ #if os(OSX) || os(iOS) || os(watchOS) || os(tvOS) import Darwin -#elseif os(Linux) || os(FreeBSD) || os(PS4) || os(Android) +#elseif os(Linux) || os(FreeBSD) || os(PS4) || os(Android) || CYGWIN import Glibc #endif diff --git a/stdlib/private/SwiftPrivatePthreadExtras/SwiftPrivatePthreadExtras.swift b/stdlib/private/SwiftPrivatePthreadExtras/SwiftPrivatePthreadExtras.swift index 62b7cc8e22f21..fe0c4f06586d7 100644 --- a/stdlib/private/SwiftPrivatePthreadExtras/SwiftPrivatePthreadExtras.swift +++ b/stdlib/private/SwiftPrivatePthreadExtras/SwiftPrivatePthreadExtras.swift @@ -17,7 +17,7 @@ #if os(OSX) || os(iOS) || os(watchOS) || os(tvOS) import Darwin -#elseif os(Linux) || os(FreeBSD) || os(PS4) || os(Android) +#elseif os(Linux) || os(FreeBSD) || os(PS4) || os(Android) || CYGWIN import Glibc #endif diff --git a/stdlib/public/Platform/Platform.swift b/stdlib/public/Platform/Platform.swift index 63e82afeb3883..1512aa04bb1f0 100644 --- a/stdlib/public/Platform/Platform.swift +++ b/stdlib/public/Platform/Platform.swift @@ -382,7 +382,7 @@ public var SIG_HOLD: sighandler_t { } #elseif os(Windows) #if CYGWIN -public typealias sighandler_t = __sighandler_t +public typealias sighandler_t = _sig_func_ptr public var SIG_DFL: sighandler_t? { return nil } public var SIG_IGN: sighandler_t { @@ -417,16 +417,9 @@ public var SEM_FAILED: UnsafeMutablePointer? { #if os(OSX) || os(iOS) || os(watchOS) || os(tvOS) // The value is ABI. Value verified to be correct for OS X, iOS, watchOS, tvOS. return UnsafeMutablePointer(bitPattern: -1) -#elseif os(Linux) || os(FreeBSD) || os(PS4) || os(Android) +#elseif os(Linux) || os(FreeBSD) || os(PS4) || os(Android) || CYGWIN // The value is ABI. Value verified to be correct on Glibc. return UnsafeMutablePointer(bitPattern: 0) -#elseif os(Windows) -#if CYGWIN - // The value is ABI. Value verified to be correct on Glibc. - return UnsafeMutablePointer(bitPattern: 0) -#else - _UnsupportedPlatformError() -#endif #else _UnsupportedPlatformError() #endif diff --git a/stdlib/public/Platform/tgmath.swift.gyb b/stdlib/public/Platform/tgmath.swift.gyb index ae688e01a878f..55be7b3863a1f 100644 --- a/stdlib/public/Platform/tgmath.swift.gyb +++ b/stdlib/public/Platform/tgmath.swift.gyb @@ -215,22 +215,14 @@ public func fpclassify(_ value: ${T}) -> Int { %if T == 'Double': #if os(Linux) return Int(__fpclassify(CDouble(value))) -#elseif os(Windows) -#if CYGWIN - return Int(__fpclassify(CDouble(value))) -#else +#elseif os(Windows) && !CYGWIN return Int(_dclass(CDouble(value))) -#endif #else return Int(__fpclassifyd(CDouble(value))) #endif %else: -#if os(Windows) -#if CYGWIN - return Int(__fpclassify${f}(${CT}(value))) -#else +#if os(Windows) && !CYGWIN return Int(_${f}dclass(${CT}(value))) -#endif #else return Int(__fpclassify${f}(${CT}(value))) #endif @@ -305,7 +297,7 @@ public func scalbn(_ x: ${T}, _ n: Int) -> ${T} { % # This is AllFloatTypes not OverlayFloatTypes because of the tuple return. % for T, CT, f in AllFloatTypes(): -#if os(Linux) || os(FreeBSD) || os(PS4) || os(Android) +#if os(Linux) || os(FreeBSD) || os(PS4) || os(Android) || CYGWIN @_transparent public func lgamma(_ x: ${T}) -> (${T}, Int) { var sign = Int32(0) diff --git a/stdlib/public/core/CTypes.swift b/stdlib/public/core/CTypes.swift index fc1351b280667..8ae4b6110c0b1 100644 --- a/stdlib/public/core/CTypes.swift +++ b/stdlib/public/core/CTypes.swift @@ -43,10 +43,18 @@ public typealias CShort = Int16 public typealias CInt = Int32 /// The C 'long' type. +#if os(Windows) && !CYGWIN && arch(x86_64) +public typealias CLong = Int32 +#else public typealias CLong = Int +#endif /// The C 'long long' type. +#if os(Windows) && !CYGWIN && arch(x86_64) +public typealias CLongLong = Int +#else public typealias CLongLong = Int64 +#endif /// The C 'float' type. public typealias CFloat = Float diff --git a/stdlib/public/core/FloatingPoint.swift.gyb b/stdlib/public/core/FloatingPoint.swift.gyb index 446b457fb229e..2e617190d242c 100644 --- a/stdlib/public/core/FloatingPoint.swift.gyb +++ b/stdlib/public/core/FloatingPoint.swift.gyb @@ -1577,7 +1577,7 @@ public protocol BinaryFloatingPoint: FloatingPoint, ExpressibleByFloatLiteral { /// - Parameter value: A floating-point value. init(_ value: Double) -#if !os(Windows) && (arch(i386) || arch(x86_64)) +#if (!os(Windows) || CYGWIN) && (arch(i386) || arch(x86_64)) /// Creates a new instance from the given value, rounded to the closest /// possible representation. /// diff --git a/stdlib/public/core/FloatingPointParsing.swift.gyb b/stdlib/public/core/FloatingPointParsing.swift.gyb index b64710810b277..1fe02dd4f9317 100644 --- a/stdlib/public/core/FloatingPointParsing.swift.gyb +++ b/stdlib/public/core/FloatingPointParsing.swift.gyb @@ -38,7 +38,7 @@ internal func _isspace_clocale(_ u: UTF16.CodeUnit) -> Bool { % Self = floatName(bits) % if bits == 80: -#if !os(Windows) && (arch(i386) || arch(x86_64)) +#if (!os(Windows) || CYGWIN) && (arch(i386) || arch(x86_64)) % end //===--- Parsing ----------------------------------------------------------===// diff --git a/stdlib/public/core/FloatingPointTypes.swift.gyb b/stdlib/public/core/FloatingPointTypes.swift.gyb index 395e58e44b8d2..bb226614ceb78 100644 --- a/stdlib/public/core/FloatingPointTypes.swift.gyb +++ b/stdlib/public/core/FloatingPointTypes.swift.gyb @@ -66,7 +66,7 @@ else: }% % if bits == 80: -#if !os(Windows) && (arch(i386) || arch(x86_64)) +#if (!os(Windows) || CYGWIN) && (arch(i386) || arch(x86_64)) % end ${SelfDocComment} @@ -706,7 +706,7 @@ extension ${Self} : _ExpressibleByBuiltinIntegerLiteral, ExpressibleByIntegerLit } } -#if !os(Windows) && (arch(i386) || arch(x86_64)) +#if (!os(Windows) || CYGWIN) && (arch(i386) || arch(x86_64)) % builtinFloatLiteralBits = 80 extension ${Self} : _ExpressibleByBuiltinFloatLiteral { @@ -851,7 +851,7 @@ extension ${Self} { % That = src_type.stdlib_name % if srcBits == 80: -#if !os(Windows) && (arch(i386) || arch(x86_64)) +#if (!os(Windows) || CYGWIN) && (arch(i386) || arch(x86_64)) % end % if srcBits == bits: diff --git a/stdlib/public/core/Policy.swift b/stdlib/public/core/Policy.swift index cdf9a896ec53b..992de1d2545f8 100644 --- a/stdlib/public/core/Policy.swift +++ b/stdlib/public/core/Policy.swift @@ -104,7 +104,7 @@ public typealias StringLiteralType = String // IEEE Binary64, and we need 1 bit to represent the sign. Instead of using // 1025, we use the next round number -- 2048. public typealias _MaxBuiltinIntegerType = Builtin.Int2048 -#if !os(Windows) && (arch(i386) || arch(x86_64)) +#if (!os(Windows) || CYGWIN) && (arch(i386) || arch(x86_64)) public typealias _MaxBuiltinFloatType = Builtin.FPIEEE80 #else public typealias _MaxBuiltinFloatType = Builtin.FPIEEE64 diff --git a/stdlib/public/core/Runtime.swift.gyb b/stdlib/public/core/Runtime.swift.gyb index fb01bdecec553..1d11ee489987c 100644 --- a/stdlib/public/core/Runtime.swift.gyb +++ b/stdlib/public/core/Runtime.swift.gyb @@ -348,7 +348,7 @@ internal struct _Buffer72 { % for bits in [ 32, 64, 80 ]: % if bits == 80: -#if !os(Windows) && (arch(i386) || arch(x86_64)) +#if (!os(Windows) || CYGWIN) && (arch(i386) || arch(x86_64)) % end @_silgen_name("swift_float${bits}ToString") diff --git a/stdlib/public/runtime/MutexWin32.cpp b/stdlib/public/runtime/MutexWin32.cpp index 6f195dfc57be4..0bcc5005fd27d 100644 --- a/stdlib/public/runtime/MutexWin32.cpp +++ b/stdlib/public/runtime/MutexWin32.cpp @@ -15,7 +15,7 @@ // //===----------------------------------------------------------------------===// -#if defined(_WIN32) || defined(__CYGWIN__) +#if defined(_WIN32) #include "swift/Runtime/Mutex.h" #include "swift/Runtime/Debug.h" diff --git a/validation-test/StdlibUnittest/ChildProcessShutdown/FailIfChildCrashesDuringShutdown.swift b/validation-test/StdlibUnittest/ChildProcessShutdown/FailIfChildCrashesDuringShutdown.swift index 7d9ba05a633aa..1589952c84102 100644 --- a/validation-test/StdlibUnittest/ChildProcessShutdown/FailIfChildCrashesDuringShutdown.swift +++ b/validation-test/StdlibUnittest/ChildProcessShutdown/FailIfChildCrashesDuringShutdown.swift @@ -2,7 +2,7 @@ // REQUIRES: executable_test import StdlibUnittest -#if os(Linux) || os(FreeBSD) || os(PS4) || os(Android) +#if os(Linux) || os(FreeBSD) || os(PS4) || os(Android) || os(Windows) import Glibc #else import Darwin diff --git a/validation-test/StdlibUnittest/ChildProcessShutdown/FailIfChildExitsDuringShutdown.swift b/validation-test/StdlibUnittest/ChildProcessShutdown/FailIfChildExitsDuringShutdown.swift index 25334f2a39b31..77339259b14b1 100644 --- a/validation-test/StdlibUnittest/ChildProcessShutdown/FailIfChildExitsDuringShutdown.swift +++ b/validation-test/StdlibUnittest/ChildProcessShutdown/FailIfChildExitsDuringShutdown.swift @@ -2,7 +2,7 @@ // REQUIRES: executable_test import StdlibUnittest -#if os(Linux) || os(FreeBSD) || os(PS4) || os(Android) +#if os(Linux) || os(FreeBSD) || os(PS4) || os(Android) || os(Windows) import Glibc #else import Darwin diff --git a/validation-test/StdlibUnittest/ChildProcessShutdown/PassIfChildCrashedDuringTestExecution.swift b/validation-test/StdlibUnittest/ChildProcessShutdown/PassIfChildCrashedDuringTestExecution.swift index 5f719e6a2063c..567a38b5df9d6 100644 --- a/validation-test/StdlibUnittest/ChildProcessShutdown/PassIfChildCrashedDuringTestExecution.swift +++ b/validation-test/StdlibUnittest/ChildProcessShutdown/PassIfChildCrashedDuringTestExecution.swift @@ -2,7 +2,7 @@ // REQUIRES: executable_test import StdlibUnittest -#if os(Linux) || os(FreeBSD) || os(PS4) || os(Android) +#if os(Linux) || os(FreeBSD) || os(PS4) || os(Android) || os(Windows) import Glibc #else import Darwin diff --git a/validation-test/StdlibUnittest/Cygwin.swift b/validation-test/StdlibUnittest/Cygwin.swift new file mode 100644 index 0000000000000..74786f0c195ab --- /dev/null +++ b/validation-test/StdlibUnittest/Cygwin.swift @@ -0,0 +1,36 @@ +// RUN: %target-run-stdlib-swift | %FileCheck %s +// REQUIRES: executable_test + +import Swift +import StdlibUnittest + +_setOverrideOSVersion(.windowsCygnus) +_setTestSuiteFailedCallback() { print("abort()") } + +var XFailsWindows = TestSuite("XFailsCygwin") + +// CHECK: [ UXPASS ] XFailsCygwin.xfail Cygwin passes{{$}} +XFailsWindows.test("xfail Cygwin passes").xfail(.windowsCygnusAny(reason: "")).code { + expectEqual(1, 1) +} + +// CHECK: [ XFAIL ] XFailsCygwin.xfail Cygwin fails{{$}} +XFailsWindows.test("xfail Cygwin fails").xfail(.windowsCygnusAny(reason: "")).code { + expectEqual(1, 2) +} + +// CHECK: [ UXPASS ] XFailsCygwin.xfail Windows passes{{$}} +XFailsWindows.test("xfail Windows passes").xfail(.windowsAny(reason: "")).code { + expectEqual(1, 1) +} + +// CHECK: [ XFAIL ] XFailsCygwin.xfail Windows fails{{$}} +XFailsWindows.test("xfail Windows fails").xfail(.windowsAny(reason: "")).code { + expectEqual(1, 2) +} + +// CHECK: XFailsCygwin: Some tests failed, aborting +// CHECK: abort() + +runAllTests() + diff --git a/validation-test/StdlibUnittest/Stdin.swift b/validation-test/StdlibUnittest/Stdin.swift index 253f1bb14b77d..e0c282edb7cf1 100644 --- a/validation-test/StdlibUnittest/Stdin.swift +++ b/validation-test/StdlibUnittest/Stdin.swift @@ -6,7 +6,7 @@ import StdlibUnittest #if os(OSX) || os(iOS) || os(tvOS) || os(watchOS) import Darwin -#elseif os(Linux) || os(FreeBSD) || os(PS4) || os(Android) +#elseif os(Linux) || os(FreeBSD) || os(PS4) || os(Android) || os(Windows) import Glibc #endif