From 83901998c91f9242a133aab9721ede483e6b645e Mon Sep 17 00:00:00 2001 From: Saleem Abdulrasool Date: Sun, 26 Jun 2016 20:13:18 +0000 Subject: [PATCH] Port for PS4 Add support for the PS4 OS. Update the standard library and add a target unit test. --- include/swift/Basic/LangOptions.h | 3 +- lib/Basic/LangOptions.cpp | 8 ++-- lib/Basic/Platform.cpp | 3 +- lib/IRGen/IRGenModule.cpp | 37 +++++++++++-------- stdlib/private/StdlibUnittest/RaceTest.swift | 2 +- .../StdlibUnittest/StdlibCoreExtras.swift | 2 +- .../StdlibUnittest/StdlibUnittest.swift.gyb | 20 +++++++++- .../SwiftPrivateLibcExtras/Subprocess.swift | 6 ++- .../SwiftPrivateLibcExtras.swift | 2 +- .../PthreadBarriers.swift | 2 +- .../SwiftPrivatePthreadExtras.swift | 2 +- stdlib/public/Platform/Platform.swift | 12 +++--- stdlib/public/Platform/tgmath.swift.gyb | 2 +- test/1_stdlib/PrintFloat.swift | 2 +- test/1_stdlib/tgmath.swift | 2 +- test/1_stdlib/tgmath_optimized.swift | 2 +- test/IRGen/autolink-psei.swift | 13 +++++++ test/Interpreter/SDK/libc.swift | 2 +- .../x86_64PS4Target.swift | 16 ++++++++ .../FailIfChildCrashesDuringShutdown.swift | 2 +- .../FailIfChildExitsDuringShutdown.swift | 2 +- ...assIfChildCrashedDuringTestExecution.swift | 2 +- validation-test/StdlibUnittest/PS4.swift | 26 +++++++++++++ validation-test/StdlibUnittest/Stdin.swift | 2 +- validation-test/stdlib/String.swift | 2 +- 25 files changed, 128 insertions(+), 46 deletions(-) create mode 100644 test/IRGen/autolink-psei.swift create mode 100644 test/Parse/ConditionalCompilation/x86_64PS4Target.swift create mode 100644 validation-test/StdlibUnittest/PS4.swift diff --git a/include/swift/Basic/LangOptions.h b/include/swift/Basic/LangOptions.h index 2b1e97143e563..97f69e5f65322 100644 --- a/include/swift/Basic/LangOptions.h +++ b/include/swift/Basic/LangOptions.h @@ -184,8 +184,7 @@ namespace swift { Target.getOSVersion(major, minor, revision); } else if (Target.isOSLinux() || Target.isOSFreeBSD() || Target.isAndroid() || Target.isOSWindows() || - Target.getTriple().empty()) - { + Target.isPS4() || Target.getTriple().empty()) { major = minor = revision = 0; } else { llvm_unreachable("Unsupported target OS"); diff --git a/lib/Basic/LangOptions.cpp b/lib/Basic/LangOptions.cpp index eee99069e40ee..e646c64b15440 100644 --- a/lib/Basic/LangOptions.cpp +++ b/lib/Basic/LangOptions.cpp @@ -31,7 +31,8 @@ static const StringRef SupportedConditionalCompilationOSs[] = { "Linux", "FreeBSD", "Windows", - "Android" + "Android", + "PS4", }; static const StringRef SupportedConditionalCompilationArches[] = { @@ -128,9 +129,10 @@ std::pair LangOptions::setTarget(llvm::Triple triple) { addPlatformConditionValue("os", "FreeBSD"); else if (triple.isOSWindows()) addPlatformConditionValue("os", "Windows"); - else { + else if (triple.isPS4()) + addPlatformConditionValue("os", "PS4"); + else UnsupportedOS = true; - } bool UnsupportedArch = false; diff --git a/lib/Basic/Platform.cpp b/lib/Basic/Platform.cpp index 494ca4e4b9a0f..d0b1fada64ede 100644 --- a/lib/Basic/Platform.cpp +++ b/lib/Basic/Platform.cpp @@ -105,7 +105,6 @@ StringRef swift::getPlatformNameForTriple(const llvm::Triple &triple) { case llvm::Triple::CUDA: case llvm::Triple::NVCL: case llvm::Triple::AMDHSA: - case llvm::Triple::PS4: case llvm::Triple::ELFIAMCU: return ""; case llvm::Triple::Darwin: @@ -120,6 +119,8 @@ StringRef swift::getPlatformNameForTriple(const llvm::Triple &triple) { return "freebsd"; case llvm::Triple::Win32: return "windows"; + case llvm::Triple::PS4: + return "ps4"; } llvm_unreachable("unsupported OS"); } diff --git a/lib/IRGen/IRGenModule.cpp b/lib/IRGen/IRGenModule.cpp index 6021e021cbcde..322701357a8a3 100644 --- a/lib/IRGen/IRGenModule.cpp +++ b/lib/IRGen/IRGenModule.cpp @@ -796,6 +796,15 @@ llvm::SmallString<32> getTargetDependentLibraryOption(const llvm::Triple &T, buffer += ".lib"; if (quote) buffer += '"'; + } else if (T.isPS4()) { + bool quote = library.find(' ') != StringRef::npos; + + buffer += "\01"; + if (quote) + buffer += '"'; + buffer += library; + if (quote) + buffer += '"'; } else { buffer += "-l"; buffer += library; @@ -897,11 +906,9 @@ void IRGenModule::emitAutolinkInfo() { }), AutolinkEntries.end()); - switch (TargetInfo.OutputObjectFormat) { - case llvm::Triple::UnknownObjectFormat: - llvm_unreachable("unknown object format"); - case llvm::Triple::COFF: - case llvm::Triple::MachO: { + if (TargetInfo.OutputObjectFormat == llvm::Triple::COFF || + TargetInfo.OutputObjectFormat == llvm::Triple::MachO || + Triple.isPS4()) { llvm::LLVMContext &ctx = Module.getContext(); if (!LinkerOptions) { @@ -917,9 +924,10 @@ void IRGenModule::emitAutolinkInfo() { (void)FoundOldEntry; assert(FoundOldEntry && "Could not replace old linker options entry?"); } - break; - } - case llvm::Triple::ELF: { + } else { + assert(TargetInfo.OutputObjectFormat == llvm::Triple::ELF && + "expected ELF output format"); + // Merge the entries into null-separated string. llvm::SmallString<64> EntriesString; for (auto &EntryNode : AutolinkEntries) { @@ -931,19 +939,16 @@ void IRGenModule::emitAutolinkInfo() { } } auto EntriesConstant = llvm::ConstantDataArray::getString( - LLVMContext, EntriesString, /*AddNull=*/false); + LLVMContext, EntriesString, /*AddNull=*/false); - auto var = new llvm::GlobalVariable(*getModule(), - EntriesConstant->getType(), true, - llvm::GlobalValue::PrivateLinkage, - EntriesConstant, - "_swift1_autolink_entries"); + auto var = + new llvm::GlobalVariable(*getModule(), EntriesConstant->getType(), true, + llvm::GlobalValue::PrivateLinkage, + EntriesConstant, "_swift1_autolink_entries"); var->setSection(".swift1_autolink_entries"); var->setAlignment(getPointerAlignment().getValue()); addUsedGlobal(var); - break; - } } if (!IRGen.Opts.ForceLoadSymbolName.empty()) { diff --git a/stdlib/private/StdlibUnittest/RaceTest.swift b/stdlib/private/StdlibUnittest/RaceTest.swift index 43a4a3edc031f..f3585fb832b02 100644 --- a/stdlib/private/StdlibUnittest/RaceTest.swift +++ b/stdlib/private/StdlibUnittest/RaceTest.swift @@ -40,7 +40,7 @@ import SwiftPrivate import SwiftPrivatePthreadExtras #if os(OSX) || os(iOS) import Darwin -#elseif os(Linux) || os(FreeBSD) || os(Android) +#elseif os(Linux) || os(FreeBSD) || os(PS4) || os(Android) import Glibc #endif diff --git a/stdlib/private/StdlibUnittest/StdlibCoreExtras.swift b/stdlib/private/StdlibUnittest/StdlibCoreExtras.swift index 0e26066add4e0..5e321600c7b35 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(Android) +#elseif os(Linux) || os(FreeBSD) || os(PS4) || os(Android) import Glibc #endif diff --git a/stdlib/private/StdlibUnittest/StdlibUnittest.swift.gyb b/stdlib/private/StdlibUnittest/StdlibUnittest.swift.gyb index 46c7627f2a93f..994741d30b10c 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(Android) +#elseif os(Linux) || os(FreeBSD) || os(PS4) || os(Android) import Glibc #endif @@ -1406,6 +1406,7 @@ public enum OSVersion : CustomStringConvertible { case linux case freeBSD case android + case ps4 public var description: String { switch self { @@ -1427,6 +1428,8 @@ public enum OSVersion : CustomStringConvertible { return "Linux" case .freeBSD: return "FreeBSD" + case .ps4: + return "PS4" case .android: return "Android" } @@ -1463,6 +1466,8 @@ func _getOSVersion() -> OSVersion { return .linux #elseif os(FreeBSD) return .freeBSD +#elseif os(PS4) + return .ps4 #elseif os(Android) return .android #else @@ -1539,6 +1544,8 @@ public enum TestRunPredicate : CustomStringConvertible { case freeBSDAny(reason: String) + case ps4Any(reason: String) + case androidAny(reason: String) case objCRuntime(/*reason:*/ String) @@ -1624,6 +1631,9 @@ public enum TestRunPredicate : CustomStringConvertible { case .freeBSDAny(reason: let reason): return "freeBSDAny(*, reason: \(reason))" + case .ps4Any(reason: let reason): + return "ps4Any(*, reason: \(reason))" + case .objCRuntime(let reason): return "Objective-C runtime, reason: \(reason))" case .nativeRuntime(let reason): @@ -1881,6 +1891,14 @@ public enum TestRunPredicate : CustomStringConvertible { return false } + case .ps4Any: + switch _getRunningOSVersion() { + case .ps4: + return true + default: + return false + } + case .objCRuntime: #if _runtime(_ObjC) return true diff --git a/stdlib/private/SwiftPrivateLibcExtras/Subprocess.swift b/stdlib/private/SwiftPrivateLibcExtras/Subprocess.swift index 8468c1c289980..387734f00b87d 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(Android) +#elseif os(Linux) || os(FreeBSD) || os(PS4) || os(Android) import Glibc #endif @@ -284,7 +284,9 @@ internal func _getEnviron() -> UnsafeMutablePointer? #if os(OSX) || os(iOS) || os(watchOS) || os(tvOS) return _NSGetEnviron().pointee #elseif os(FreeBSD) - return environ; + return environ +#elseif os(PS4) + return environ #elseif os(Android) return environ #else diff --git a/stdlib/private/SwiftPrivateLibcExtras/SwiftPrivateLibcExtras.swift b/stdlib/private/SwiftPrivateLibcExtras/SwiftPrivateLibcExtras.swift index 3be7b26c7b514..1b722422297b1 100644 --- a/stdlib/private/SwiftPrivateLibcExtras/SwiftPrivateLibcExtras.swift +++ b/stdlib/private/SwiftPrivateLibcExtras/SwiftPrivateLibcExtras.swift @@ -13,7 +13,7 @@ import SwiftPrivate #if os(OSX) || os(iOS) || os(watchOS) || os(tvOS) import Darwin -#elseif os(Linux) || os(FreeBSD) || os(Android) +#elseif os(Linux) || os(FreeBSD) || os(PS4) || os(Android) import Glibc #endif diff --git a/stdlib/private/SwiftPrivatePthreadExtras/PthreadBarriers.swift b/stdlib/private/SwiftPrivatePthreadExtras/PthreadBarriers.swift index 02ec2d4dcc269..31b9e35f4f48a 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(Android) +#elseif os(Linux) || os(FreeBSD) || os(PS4) || os(Android) import Glibc #endif diff --git a/stdlib/private/SwiftPrivatePthreadExtras/SwiftPrivatePthreadExtras.swift b/stdlib/private/SwiftPrivatePthreadExtras/SwiftPrivatePthreadExtras.swift index 06e7653d5d8a6..5dff96eb75738 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(Android) +#elseif os(Linux) || os(FreeBSD) || os(PS4) || os(Android) import Glibc #endif diff --git a/stdlib/public/Platform/Platform.swift b/stdlib/public/Platform/Platform.swift index fdb6bd20195bc..c27a77171a053 100644 --- a/stdlib/public/Platform/Platform.swift +++ b/stdlib/public/Platform/Platform.swift @@ -96,7 +96,7 @@ public func || ( public var errno : Int32 { get { -#if os(OSX) || os(iOS) || os(watchOS) || os(tvOS) || os(FreeBSD) +#if os(OSX) || os(iOS) || os(watchOS) || os(tvOS) || os(FreeBSD) || os(PS4) return __error().pointee // FIXME: os(Windows) should be replaced, such as triple(Cygwin) #elseif os(Android) || os(Windows) @@ -106,7 +106,7 @@ public var errno : Int32 { #endif } set(val) { -#if os(OSX) || os(iOS) || os(watchOS) || os(tvOS) || os(FreeBSD) +#if os(OSX) || os(iOS) || os(watchOS) || os(tvOS) || os(FreeBSD) || os(PS4) return __error().pointee = val #elseif os(Android) || os(Windows) return __errno().pointee = val @@ -121,7 +121,7 @@ public var errno : Int32 { // stdio.h //===----------------------------------------------------------------------===// -#if os(OSX) || os(iOS) || os(watchOS) || os(tvOS) || os(FreeBSD) +#if os(OSX) || os(iOS) || os(watchOS) || os(tvOS) || os(FreeBSD) || os(PS4) public var stdin : UnsafeMutablePointer { get { return __stdinp @@ -354,7 +354,7 @@ public var SIG_DFL: sig_t? { return nil } public var SIG_IGN: sig_t { return unsafeBitCast(1, to: sig_t.self) } public var SIG_ERR: sig_t { return unsafeBitCast(-1, to: sig_t.self) } public var SIG_HOLD: sig_t { return unsafeBitCast(5, to: sig_t.self) } -#elseif os(Linux) || os(FreeBSD) || os(Android) || os(Windows) +#elseif os(Linux) || os(FreeBSD) || os(PS4) || os(Android) || os(Windows) #if os(Windows) // In Cygwin, the below SIG_* have the same value with Linux. // Verified with libstdc++6 v5.3.0 in Cygwin v2.4.1 64bit. @@ -386,7 +386,7 @@ 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(Android) || os(Windows) +#elseif os(Linux) || os(FreeBSD) || os(PS4) || os(Android) || os(Windows) // The value is ABI. Value verified to be correct on Glibc. return UnsafeMutablePointer(bitPattern: 0) #else @@ -429,7 +429,7 @@ public func sem_open( //===----------------------------------------------------------------------===// // FreeBSD defines extern char **environ differently than Linux. -#if os(FreeBSD) +#if os(FreeBSD) || os(PS4) @_silgen_name("_swift_FreeBSD_getEnv") func _swift_FreeBSD_getEnv( ) -> UnsafeMutablePointer?>> diff --git a/stdlib/public/Platform/tgmath.swift.gyb b/stdlib/public/Platform/tgmath.swift.gyb index 42a9f369255d2..b1e2a74d649b5 100644 --- a/stdlib/public/Platform/tgmath.swift.gyb +++ b/stdlib/public/Platform/tgmath.swift.gyb @@ -247,7 +247,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(Android) || os(Windows) +#if os(Linux) || os(FreeBSD) || os(PS4) || os(Android) || os(Windows) @_transparent public func lgamma(_ x: ${T}) -> (${T}, Int) { var sign = CInt(0) diff --git a/test/1_stdlib/PrintFloat.swift b/test/1_stdlib/PrintFloat.swift index bd524bdb4216b..6eb073b9f156e 100644 --- a/test/1_stdlib/PrintFloat.swift +++ b/test/1_stdlib/PrintFloat.swift @@ -6,7 +6,7 @@ // REQUIRES: executable_test import StdlibUnittest -#if os(Linux) || os(FreeBSD) || os(Android) +#if os(Linux) || os(FreeBSD) || os(PS4) || os(Android) import Glibc #else import Darwin diff --git a/test/1_stdlib/tgmath.swift b/test/1_stdlib/tgmath.swift index 55fac978faabb..791d386e205a6 100644 --- a/test/1_stdlib/tgmath.swift +++ b/test/1_stdlib/tgmath.swift @@ -1,7 +1,7 @@ // RUN: %target-run-simple-swift // REQUIRES: executable_test -#if os(Linux) || os(FreeBSD) || os(Android) +#if os(Linux) || os(FreeBSD) || os(PS4) || os(Android) import Glibc // FIXME: this is a quick hack for non Darwin platforms // where they doesn't have CoreGraphics module. diff --git a/test/1_stdlib/tgmath_optimized.swift b/test/1_stdlib/tgmath_optimized.swift index 5eada6e1b4639..2b0fcbdc36c87 100644 --- a/test/1_stdlib/tgmath_optimized.swift +++ b/test/1_stdlib/tgmath_optimized.swift @@ -3,7 +3,7 @@ // RUN: %target-run %t/a.out // REQUIRES: executable_test -#if os(Linux) || os(FreeBSD) || os(Android) +#if os(Linux) || os(FreeBSD) || os(PS4) || os(Android) import Glibc #else import Darwin diff --git a/test/IRGen/autolink-psei.swift b/test/IRGen/autolink-psei.swift new file mode 100644 index 0000000000000..2fb66998f46be --- /dev/null +++ b/test/IRGen/autolink-psei.swift @@ -0,0 +1,13 @@ +// RUN: rm -rf %t +// RUN: mkdir -p %t +// RUN: %swift -target x86_64-scei-ps4 -parse-as-library -parse-stdlib -emit-module-path %t/module.swiftmodule -module-name module -module-link-name module %s +// RUN: %swift -target x86_64-scei-ps4 -parse-as-library -parse-stdlib -module-name autolink -I %t -D MAIN_MODULE -emit-ir -o - %s | FileCheck %s -check-prefix CHECK-IR + +#if MAIN_MODULE +import module +#endif + +// CHECK-IR: !{{[0-9]+}} = !{i32 {{[0-9]+}}, !"Linker Options", [[NODE:![0-9]+]]} +// CHECK-IR: [[NODE]] = !{[[LIST:![0-9]+]]} +// CHECK-IR: [[LIST]] = !{!"\01module"} + diff --git a/test/Interpreter/SDK/libc.swift b/test/Interpreter/SDK/libc.swift index 9bc3b9312151c..8c86395b15fef 100644 --- a/test/Interpreter/SDK/libc.swift +++ b/test/Interpreter/SDK/libc.swift @@ -7,7 +7,7 @@ #if os(OSX) || os(iOS) || os(watchOS) || os(tvOS) import Darwin -#elseif os(Linux) || os(FreeBSD) || os(Android) +#elseif os(Linux) || os(FreeBSD) || os(PS4) || os(Android) import Glibc #endif diff --git a/test/Parse/ConditionalCompilation/x86_64PS4Target.swift b/test/Parse/ConditionalCompilation/x86_64PS4Target.swift new file mode 100644 index 0000000000000..9d080e4e7cf8b --- /dev/null +++ b/test/Parse/ConditionalCompilation/x86_64PS4Target.swift @@ -0,0 +1,16 @@ +// RUN: %swift -parse %s -verify -target x86_64-scei-ps4 -disable-objc-interop -parse-stdlib +// RUN: %swift-ide-test -test-input-complete -source-filename %s -target x86_64-scei-ps4 + +#if os(FreeBSD) +// This block should not parse. +// os(FreeBSD) does not imply os(PS4) +let i : Int = "Hello" +#endif + +#if arch(x86_64) && os(PS4) && _runtime(_Native) && _endian(little) +class C {} +var x = C() +#endif + +var y = x + diff --git a/validation-test/StdlibUnittest/ChildProcessShutdown/FailIfChildCrashesDuringShutdown.swift b/validation-test/StdlibUnittest/ChildProcessShutdown/FailIfChildCrashesDuringShutdown.swift index b1220934cb845..4e3e271720b37 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(Android) +#if os(Linux) || os(FreeBSD) || os(PS4) || os(Android) import Glibc #else import Darwin diff --git a/validation-test/StdlibUnittest/ChildProcessShutdown/FailIfChildExitsDuringShutdown.swift b/validation-test/StdlibUnittest/ChildProcessShutdown/FailIfChildExitsDuringShutdown.swift index 86b00db075312..7f6a79559fa32 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(Android) +#if os(Linux) || os(FreeBSD) || os(PS4) || os(Android) import Glibc #else import Darwin diff --git a/validation-test/StdlibUnittest/ChildProcessShutdown/PassIfChildCrashedDuringTestExecution.swift b/validation-test/StdlibUnittest/ChildProcessShutdown/PassIfChildCrashedDuringTestExecution.swift index 5f23a15d2518e..5f719e6a2063c 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(Android) +#if os(Linux) || os(FreeBSD) || os(PS4) || os(Android) import Glibc #else import Darwin diff --git a/validation-test/StdlibUnittest/PS4.swift b/validation-test/StdlibUnittest/PS4.swift new file mode 100644 index 0000000000000..a3ce7e8732f09 --- /dev/null +++ b/validation-test/StdlibUnittest/PS4.swift @@ -0,0 +1,26 @@ +// RUN: %target-run-stdlib-swift | FileCheck %s +// REQUIRES: executable_test + +import Swift +import StdlibUnittest + +_setOverrideOSVersion(.ps4) +_setTestSuiteFailedCallback() { print("abort()") } + +var XFailsPS4 = TestSuite("XFailsPS4") + +// CHECK: [ UXPASS ] XFailsPS4.xfail PS4 passes{{$}} +XFailsPS4.test("xfail PS4 passes").xfail(.ps4Any(reason: "")).code { + expectEqual(1, 1) +} + +// CHECK: [ XFAIL ] XFailsPS4.xfail PS4 fails{{$}} +XFailsPS4.test("xfail PS4 fails").xfail(.ps4Any(reason: "")).code { + expectEqual(1, 2) +} + +// CHECK: XFailsPS4: Some tests failed, aborting +// CHECK: abort() + +runAllTests() + diff --git a/validation-test/StdlibUnittest/Stdin.swift b/validation-test/StdlibUnittest/Stdin.swift index 272ce5ce0ebb0..253f1bb14b77d 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(Android) +#elseif os(Linux) || os(FreeBSD) || os(PS4) || os(Android) import Glibc #endif diff --git a/validation-test/stdlib/String.swift b/validation-test/stdlib/String.swift index fac8857887268..1f6fefb271837 100644 --- a/validation-test/stdlib/String.swift +++ b/validation-test/stdlib/String.swift @@ -1005,7 +1005,7 @@ StringTests.test( #endif } -#if os(Linux) || os(FreeBSD) || os(Android) +#if os(Linux) || os(FreeBSD) || os(PS4) || os(Android) import Glibc #endif