From a7d49ca1957b9746d8e58beea760113d878a9389 Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Wed, 18 Mar 2020 11:54:24 +0000 Subject: [PATCH 1/9] [WASM] Fix test/stdlib/Mirror.swift --- test/stdlib/Runtime.swift.gyb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/stdlib/Runtime.swift.gyb b/test/stdlib/Runtime.swift.gyb index 7f659e3a9dcfc..9a5208c335c88 100644 --- a/test/stdlib/Runtime.swift.gyb +++ b/test/stdlib/Runtime.swift.gyb @@ -706,7 +706,7 @@ Reflection.test("multiprotocolTypes") { var BitTwiddlingTestSuite = TestSuite("BitTwiddling") BitTwiddlingTestSuite.test("_pointerSize") { -#if arch(i386) || arch(arm) +#if arch(i386) || arch(arm) || arch(wasm32) expectEqual(4, MemoryLayout>.size) #elseif arch(x86_64) || arch(arm64) || arch(powerpc64) || arch(powerpc64le) || arch(s390x) expectEqual(8, MemoryLayout>.size) @@ -730,7 +730,7 @@ BitTwiddlingTestSuite.test("_isPowerOf2/Int") { expectTrue(_isPowerOf2(asInt(2))) expectFalse(_isPowerOf2(asInt(3))) expectTrue(_isPowerOf2(asInt(1024))) -#if arch(i386) || arch(arm) +#if arch(i386) || arch(arm) || arch(wasm32) // Not applicable to 32-bit architectures. #elseif arch(x86_64) || arch(arm64) || arch(powerpc64) || arch(powerpc64le) || arch(s390x) expectTrue(_isPowerOf2(asInt(0x8000_0000))) From 29a89d759827508cd0d0e156994004207181023f Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Wed, 18 Mar 2020 11:58:07 +0000 Subject: [PATCH 2/9] [WASM] test/stdlib/Error.swift --- test/stdlib/Error.swift | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/test/stdlib/Error.swift b/test/stdlib/Error.swift index 1d095e80c9100..2aea1c2a0cb8c 100644 --- a/test/stdlib/Error.swift +++ b/test/stdlib/Error.swift @@ -105,6 +105,7 @@ ErrorTests.test("default domain and code") { enum SillyError: Error { case JazzHands } +#if !os(WASI) ErrorTests.test("try!") .skip(.custom({ _isFastAssertConfiguration() }, reason: "trap is not guaranteed to happen in -Ounchecked")) @@ -127,6 +128,7 @@ ErrorTests.test("try!/location") expectCrashLater() let _: () = try! { throw SillyError.JazzHands }() } +#endif ErrorTests.test("try?") { var value = try? { () throws -> Int in return 1 }() @@ -191,6 +193,7 @@ ErrorTests.test("test dealloc empty error box") { } } +#if !os(WASI) var errors: [Error] = [] ErrorTests.test("willThrow") { if #available(macOS 9999, iOS 9999, watchOS 9999, tvOS 9999, *) { @@ -215,6 +218,7 @@ ErrorTests.test("willThrow") { expectEqual(SillyError.self, type(of: errors.last!)) } } +#endif runAllTests() From a0f48aa21b88b65fdb40c30e1fc9bf58d6390bf8 Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Fri, 20 Mar 2020 09:41:01 +0000 Subject: [PATCH 3/9] Try to use wasmer instead of wasmtime to reduce exec time --- test/lit.cfg | 2 +- utils/webassembly/linux/install-dependencies.sh | 7 ++----- utils/webassembly/macos/install-dependencies.sh | 9 +-------- 3 files changed, 4 insertions(+), 14 deletions(-) diff --git a/test/lit.cfg b/test/lit.cfg index cabbca8f0c90f..8fdd05b7bd838 100644 --- a/test/lit.cfg +++ b/test/lit.cfg @@ -1376,7 +1376,7 @@ elif run_os == 'wasi': config.swift_test_options, config.swift_frontend_test_options) subst_target_swift_frontend_mock_sdk = config.target_swift_frontend subst_target_swift_frontend_mock_sdk_after = "" - config.target_run = 'wasmtime --' + config.target_run = 'wasmer run --' if 'interpret' in lit_config.params: use_interpreter_for_simple_runs() config.target_sil_opt = ( diff --git a/utils/webassembly/linux/install-dependencies.sh b/utils/webassembly/linux/install-dependencies.sh index 6cfc4cf87eb02..ae5dffeef3817 100755 --- a/utils/webassembly/linux/install-dependencies.sh +++ b/utils/webassembly/linux/install-dependencies.sh @@ -17,12 +17,9 @@ cd $SWIFT_PATH ./utils/update-checkout --clone --scheme wasm --skip-repository swift -# Install wasmtime +# Install wasmer -sudo mkdir /opt/wasmtime && cd /opt/wasmtime -wget -O - "https://github.com/bytecodealliance/wasmtime/releases/download/v0.8.0/wasmtime-v0.8.0-x86_64-linux.tar.xz" | \ - sudo tar Jx --strip-components 1 -sudo ln -sf /opt/wasmtime/* /usr/local/bin +curl https://get.wasmer.io -sSfL | sh cd $SOURCE_PATH diff --git a/utils/webassembly/macos/install-dependencies.sh b/utils/webassembly/macos/install-dependencies.sh index d46098ff791fd..16ae070c2e709 100755 --- a/utils/webassembly/macos/install-dependencies.sh +++ b/utils/webassembly/macos/install-dependencies.sh @@ -3,7 +3,7 @@ set -ex brew uninstall python@2 || true -brew install cmake ninja llvm sccache +brew install cmake ninja llvm sccache wasmer SOURCE_PATH="$( cd "$(dirname $0)/../../../../" && pwd )" SWIFT_PATH=$SOURCE_PATH/swift @@ -11,13 +11,6 @@ cd $SWIFT_PATH ./utils/update-checkout --clone --scheme wasm --skip-repository swift -# Install wasmtime - -sudo mkdir /opt/wasmtime && cd /opt/wasmtime -wget -O - "https://github.com/bytecodealliance/wasmtime/releases/download/v0.8.0/wasmtime-v0.8.0-x86_64-macos.tar.xz" | \ - sudo tar Jx --strip-components 1 -sudo ln -sf /opt/wasmtime/* /usr/local/bin - cd $SOURCE_PATH wget -O dist-wasi-sdk.tgz.zip "https://github.com/swiftwasm/wasi-sdk/releases/download/0.2.0-swiftwasm/dist-macos-latest.tgz.zip" From f371b792a2d6e49a57b9a8f6d59b46384dec6b3f Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Fri, 20 Mar 2020 12:49:54 +0000 Subject: [PATCH 4/9] [WASM] Disable always failing test case because it crashes --- test/stdlib/StringAPI.swift | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/stdlib/StringAPI.swift b/test/stdlib/StringAPI.swift index 47ee8c50667ea..e65ec357b6f33 100644 --- a/test/stdlib/StringAPI.swift +++ b/test/stdlib/StringAPI.swift @@ -319,6 +319,7 @@ StringTests.test("SameTypeComparisons") { expectFalse(xs != xs) } +#if !os(WASI) StringTests.test("CompareStringsWithUnpairedSurrogates") .xfail( .always(" Strings referring to underlying " + @@ -334,6 +335,7 @@ StringTests.test("CompareStringsWithUnpairedSurrogates") ] ) } +#endif StringTests.test("[String].joined() -> String") { let s = ["hello", "world"].joined() From e5252082e7424edb20afdfc1b8471b273271d4f5 Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Fri, 20 Mar 2020 12:51:10 +0000 Subject: [PATCH 5/9] [WASM] Disable crash test case for Mirror --- test/stdlib/Mirror.swift | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/stdlib/Mirror.swift b/test/stdlib/Mirror.swift index 60b45e7e91539..c83e0d4576b17 100644 --- a/test/stdlib/Mirror.swift +++ b/test/stdlib/Mirror.swift @@ -957,6 +957,7 @@ mirrors.test("Addressing") { expectNil(m.descendant(1, 1, "bork")) } +#if !os(WASI) mirrors.test("Invalid Path Type") .skip(.custom( { _isFastAssertConfiguration() }, @@ -968,6 +969,7 @@ mirrors.test("Invalid Path Type") expectCrashLater() _ = m.descendant(X()) } +#endif mirrors.test("PlaygroundQuickLook") { // Customization works. From cf2b7ea427fb83445d03a57d24ebf98bd7616216 Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Wed, 1 Apr 2020 02:03:37 +0000 Subject: [PATCH 6/9] [WASM] Fix test/stdlib/FlatMapDeprecation.swift --- test/stdlib/FlatMapDeprecation.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/stdlib/FlatMapDeprecation.swift b/test/stdlib/FlatMapDeprecation.swift index ee5545b8ca498..14202e45c82c2 100644 --- a/test/stdlib/FlatMapDeprecation.swift +++ b/test/stdlib/FlatMapDeprecation.swift @@ -1,4 +1,4 @@ -// RUN: %swift -swift-version 4 -typecheck -verify %s +// RUN: %target-typecheck-verify-swift -swift-version 4 func flatMapOnSequence< S : Sequence From ba7116f93a623e49d9da4e8a4f72b18b67efc3f1 Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Wed, 1 Apr 2020 02:50:57 +0000 Subject: [PATCH 7/9] Use cranelift as the backend of wasmer instead of single-pass --- test/lit.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/lit.cfg b/test/lit.cfg index 8fdd05b7bd838..448fceefb0a71 100644 --- a/test/lit.cfg +++ b/test/lit.cfg @@ -1376,7 +1376,7 @@ elif run_os == 'wasi': config.swift_test_options, config.swift_frontend_test_options) subst_target_swift_frontend_mock_sdk = config.target_swift_frontend subst_target_swift_frontend_mock_sdk_after = "" - config.target_run = 'wasmer run --' + config.target_run = 'wasmer run --backend cranelift --' if 'interpret' in lit_config.params: use_interpreter_for_simple_runs() config.target_sil_opt = ( From 74275405b3fddb71d21721fbae065ed95c14516b Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Wed, 1 Apr 2020 02:53:26 +0000 Subject: [PATCH 8/9] [WASM] Disable test/stdlib/InputStream.swift.gyb because of single process --- test/stdlib/InputStream.swift.gyb | 1 + 1 file changed, 1 insertion(+) diff --git a/test/stdlib/InputStream.swift.gyb b/test/stdlib/InputStream.swift.gyb index ffe24359b7d3a..445e654d44e1f 100644 --- a/test/stdlib/InputStream.swift.gyb +++ b/test/stdlib/InputStream.swift.gyb @@ -12,6 +12,7 @@ // -*- swift -*- // RUN: %target-run-simple-swiftgyb // REQUIRES: executable_test +// UNSUPPORTED: OS=wasi import StdlibUnittest From c74876ab8f79d3a9defe1a3aac55cb9b5f8fc0f6 Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Thu, 2 Apr 2020 03:04:19 +0000 Subject: [PATCH 9/9] [WASM] Fix test/stdlib/VarArgs.swift --- lib/ClangImporter/ImportType.cpp | 2 +- lib/ClangImporter/MappedTypes.def | 1 + stdlib/public/core/VarArgs.swift | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/ClangImporter/ImportType.cpp b/lib/ClangImporter/ImportType.cpp index 3d067ef2fdab5..16d8063d3f5a3 100644 --- a/lib/ClangImporter/ImportType.cpp +++ b/lib/ClangImporter/ImportType.cpp @@ -711,7 +711,7 @@ namespace { } static const llvm::StringLiteral vaListNames[] = { - "va_list", "__gnuc_va_list", "__va_list" + "va_list", "__gnuc_va_list", "__isoc_va_list", "__va_list" }; ImportHint hint = ImportHint::None; diff --git a/lib/ClangImporter/MappedTypes.def b/lib/ClangImporter/MappedTypes.def index c1a8c8039dcd1..7f11008619a99 100644 --- a/lib/ClangImporter/MappedTypes.def +++ b/lib/ClangImporter/MappedTypes.def @@ -128,6 +128,7 @@ MAP_STDLIB_TYPE("u_int64_t", UnsignedInt, 64, "UInt64", false, DoNothing) // There's an explicit workaround in ImportType.cpp's VisitDecayedType for that. MAP_STDLIB_TYPE("va_list", VaList, 0, "CVaListPointer", false, DoNothing) MAP_STDLIB_TYPE("__gnuc_va_list", VaList, 0, "CVaListPointer", false, DoNothing) +MAP_STDLIB_TYPE("__isoc_va_list", VaList, 0, "CVaListPointer", false, DoNothing) MAP_STDLIB_TYPE("__va_list", VaList, 0, "CVaListPointer", false, DoNothing) // libkern/OSTypes.h types. diff --git a/stdlib/public/core/VarArgs.swift b/stdlib/public/core/VarArgs.swift index 8576a86568b01..d6d9458e96f4a 100644 --- a/stdlib/public/core/VarArgs.swift +++ b/stdlib/public/core/VarArgs.swift @@ -565,7 +565,7 @@ final internal class __VaListBuilder { // supported vararg type is greater than the alignment of Int, such // as non-iOS ARM. Note that we can't use alignof because it // differs from ABI alignment on some architectures. -#if arch(arm) && !os(iOS) +#if (arch(arm) && !os(iOS)) || arch(wasm32) if let arg = arg as? _CVarArgAligned { let alignmentInWords = arg._cVarArgAlignment / MemoryLayout.size let misalignmentInWords = count % alignmentInWords