diff --git a/implementation-contributed/curation_logs/v8.json b/implementation-contributed/curation_logs/v8.json index f73abe59c5..b7e11fb57a 100644 --- a/implementation-contributed/curation_logs/v8.json +++ b/implementation-contributed/curation_logs/v8.json @@ -1,5 +1,5 @@ { - "sourceRevisionAtLastExport": "f88d169e", - "targetRevisionAtLastExport": "ad1b4aadf8", + "sourceRevisionAtLastExport": "f85a3554", + "targetRevisionAtLastExport": "6bb8f41e0a", "curatedFiles": {} } \ No newline at end of file diff --git a/implementation-contributed/v8/intl/general/CanonicalizeLocaleListTakeLocale.js b/implementation-contributed/v8/intl/general/CanonicalizeLocaleListTakeLocale.js new file mode 100644 index 0000000000..e4ff793cca --- /dev/null +++ b/implementation-contributed/v8/intl/general/CanonicalizeLocaleListTakeLocale.js @@ -0,0 +1,65 @@ +// Copyright 2019 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +// +// Flags: --harmony-locale +// +// Test NumberFormat will accept Intl.Locale as first parameter, or +// as in the array. + +let tag = "zh-Hant-TW-u-nu-thai" +let l = new Intl.Locale(tag); + +var nf; +// Test with String +assertDoesNotThrow(() => nf = new Intl.NumberFormat(tag)); +assertEquals(tag, nf.resolvedOptions().locale); + +// Test with Array with one String +assertDoesNotThrow(() => nf = new Intl.NumberFormat([tag])); +assertEquals(tag, nf.resolvedOptions().locale); + +// Test with Array with two String +assertDoesNotThrow(() => nf = new Intl.NumberFormat([tag, "en"])); +assertEquals(tag, nf.resolvedOptions().locale); + +// Test with a Locale +assertDoesNotThrow(() => nf = new Intl.NumberFormat(l)); +assertEquals(tag, nf.resolvedOptions().locale); + +// Test with a Array of one Locale +assertDoesNotThrow(() => nf = new Intl.NumberFormat([l])); +assertEquals(tag, nf.resolvedOptions().locale); + +// Test with a Array of one Locale and a Sring +assertDoesNotThrow(() => nf = new Intl.NumberFormat([l, "en"])); +assertEquals(tag, nf.resolvedOptions().locale); + +// Test DateTimeFormat +var df; +assertDoesNotThrow(() => df = new Intl.DateTimeFormat(tag)); +assertEquals(tag, df.resolvedOptions().locale); +assertDoesNotThrow(() => df = new Intl.DateTimeFormat([tag])); +assertEquals(tag, df.resolvedOptions().locale); + +// Test RelativeTimeFormat +var rtf; +assertDoesNotThrow(() => rtf = new Intl.RelativeTimeFormat(tag)); +assertEquals(tag, rtf.resolvedOptions().locale); +assertDoesNotThrow(() => rtf = new Intl.RelativeTimeFormat([tag])); +assertEquals(tag, rtf.resolvedOptions().locale); + +// Test ListFormat +tag = "zh-Hant-TW" +var lf; +assertDoesNotThrow(() => lf = new Intl.ListFormat(tag)); +assertEquals(tag, lf.resolvedOptions().locale); +assertDoesNotThrow(() => lf = new Intl.ListFormat([tag])); +assertEquals(tag, lf.resolvedOptions().locale); + +// Test Collator +var col; +assertDoesNotThrow(() => col = new Intl.Collator(tag)); +assertEquals(tag, lf.resolvedOptions().locale); +assertDoesNotThrow(() => col = new Intl.Collator([tag])); +assertEquals(tag, lf.resolvedOptions().locale); diff --git a/implementation-contributed/v8/intl/intl.status b/implementation-contributed/v8/intl/intl.status index 471b1184c5..83e546db76 100644 --- a/implementation-contributed/v8/intl/intl.status +++ b/implementation-contributed/v8/intl/intl.status @@ -27,8 +27,12 @@ [ [ALWAYS, { - # TODO(jochen): The following test is flaky. +# TODO(jochen): The following test is flaky. 'overrides/caching': [PASS, FAIL], + + # https://code.google.com/p/v8/issues/detail?id=7481 + 'collator/check-kf-option': [FAIL], + 'collator/check-kn-option': [FAIL], }], # ALWAYS ['variant == no_wasm_traps', { diff --git a/implementation-contributed/v8/intl/locale/locale-constructor.js b/implementation-contributed/v8/intl/locale/locale-constructor.js index 3da9e291be..bf2510553f 100644 --- a/implementation-contributed/v8/intl/locale/locale-constructor.js +++ b/implementation-contributed/v8/intl/locale/locale-constructor.js @@ -86,9 +86,7 @@ assertThrows( }), Error); -// These don't throw yet, we need to implement language/script/region -// override logic first. -assertDoesNotThrow( +assertThrows( () => new Intl.Locale('en-US', { get language() { throw new Error('foo'); @@ -96,7 +94,7 @@ assertDoesNotThrow( }), Error); -assertDoesNotThrow( +assertThrows( () => new Intl.Locale('en-US', { get script() { throw new Error('foo'); @@ -104,7 +102,7 @@ assertDoesNotThrow( }), Error); -assertDoesNotThrow( +assertThrows( () => new Intl.Locale('en-US', { get region() { throw new Error('foo'); diff --git a/implementation-contributed/v8/intl/locale/property.js b/implementation-contributed/v8/intl/locale/property.js new file mode 100644 index 0000000000..cbe076842f --- /dev/null +++ b/implementation-contributed/v8/intl/locale/property.js @@ -0,0 +1,22 @@ +// Copyright 2019 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --harmony-locale + +// Make sure that accessing locale property will return undefined instead of +// crash. + +let locale = new Intl.Locale('sr'); + +assertEquals('sr', locale.toString()); +assertEquals('sr', locale.baseName); +assertEquals('sr', locale.language); +assertEquals(undefined, locale.script); +assertEquals(undefined, locale.region); +assertEquals(false, locale.numeric); +assertEquals(undefined, locale.calendar); +assertEquals(undefined, locale.collation); +assertEquals(undefined, locale.hourCycle); +assertEquals(undefined, locale.caseFirst); +assertEquals(undefined, locale.numberingSystem); diff --git a/implementation-contributed/v8/intl/regress-8657.js b/implementation-contributed/v8/intl/regress-8657.js new file mode 100644 index 0000000000..c1c5cea708 --- /dev/null +++ b/implementation-contributed/v8/intl/regress-8657.js @@ -0,0 +1,7 @@ +// Copyright 2019 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --harmony-locale + +assertDoesNotThrow(() => new Intl.Locale('und')); diff --git a/implementation-contributed/v8/intl/regress-917151.js b/implementation-contributed/v8/intl/regress-917151.js new file mode 100644 index 0000000000..9b971fe2b9 --- /dev/null +++ b/implementation-contributed/v8/intl/regress-917151.js @@ -0,0 +1,11 @@ +// Copyright 2016 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Regression test for 917151 + +assertThrows( + () => Number.prototype.toLocaleString.call( + -22, + "x-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6"), + RangeError) diff --git a/implementation-contributed/v8/intl/relative-time-format/resolved-options-nu.js b/implementation-contributed/v8/intl/relative-time-format/resolved-options-nu.js new file mode 100644 index 0000000000..fb1fa72a93 --- /dev/null +++ b/implementation-contributed/v8/intl/relative-time-format/resolved-options-nu.js @@ -0,0 +1,97 @@ +// Copyright 2018 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --harmony-intl-relative-time-format + +// For locale default the numberingSystem to 'latn' +assertEquals( + "latn", + new Intl.RelativeTimeFormat("ar").resolvedOptions().numberingSystem +); +assertEquals( + "latn", + new Intl.RelativeTimeFormat("en").resolvedOptions().numberingSystem +); +assertEquals( + "latn", + new Intl.RelativeTimeFormat("fr").resolvedOptions().numberingSystem +); +assertEquals( + "latn", + new Intl.RelativeTimeFormat("hi").resolvedOptions().numberingSystem +); +assertEquals( + "latn", + new Intl.RelativeTimeFormat("th").resolvedOptions().numberingSystem +); +assertEquals( + "latn", + new Intl.RelativeTimeFormat("zh-Hant").resolvedOptions().numberingSystem +); + +// For locale default the numberingSystem to other than 'latn' +assertEquals( + "arab", + new Intl.RelativeTimeFormat("ar-TD").resolvedOptions().numberingSystem +); +assertEquals( + "arabext", + new Intl.RelativeTimeFormat("fa").resolvedOptions().numberingSystem +); +assertEquals( + "beng", + new Intl.RelativeTimeFormat("bn").resolvedOptions().numberingSystem +); + +// For locale use -u-nu- to change to other numberingSystem +assertEquals( + "thai", + new Intl.RelativeTimeFormat("en-u-nu-thai").resolvedOptions() + .numberingSystem +); +assertEquals( + "arab", + new Intl.RelativeTimeFormat("en-u-nu-arab").resolvedOptions() + .numberingSystem +); + +// For locale which default others but use -u-nu-latn to change to 'latn' numberingSystem +assertEquals( + "latn", + new Intl.RelativeTimeFormat("fa-u-nu-latn").resolvedOptions() + .numberingSystem +); +assertEquals( + "latn", + new Intl.RelativeTimeFormat("ar-TD-u-nu-latn").resolvedOptions() + .numberingSystem +); +assertEquals( + "latn", + new Intl.RelativeTimeFormat("fa-u-nu-latn").resolvedOptions() + .numberingSystem +); +assertEquals( + "latn", + new Intl.RelativeTimeFormat("bn-u-nu-latn").resolvedOptions() + .numberingSystem +); + +// For locale use -u-nu- with invalid value still back to default. +assertEquals( + "latn", + new Intl.RelativeTimeFormat("en-u-nu-abcd").resolvedOptions() + .numberingSystem +); + +assertEquals( + "arabext", + new Intl.RelativeTimeFormat("fa-u-nu-abcd").resolvedOptions() + .numberingSystem +); +assertEquals( + "beng", + new Intl.RelativeTimeFormat("bn-u-nu-abcd").resolvedOptions() + .numberingSystem +); diff --git a/implementation-contributed/v8/intl/relative-time-format/resolved-options.js b/implementation-contributed/v8/intl/relative-time-format/resolved-options.js index 774a349146..391b83ae0a 100644 --- a/implementation-contributed/v8/intl/relative-time-format/resolved-options.js +++ b/implementation-contributed/v8/intl/relative-time-format/resolved-options.js @@ -13,10 +13,15 @@ assertEquals('long', rtf.resolvedOptions().style); assertEquals('always', rtf.resolvedOptions().numeric); // contains style, numeric and locale key -assertEquals(3, Object.getOwnPropertyNames(rtf.resolvedOptions()).length); +assertEquals(4, Object.getOwnPropertyNames(rtf.resolvedOptions()).length); // contains style, numeric and locale key -assertEquals(3, Object.getOwnPropertyNames(new Intl.RelativeTimeFormat('en').resolvedOptions()).length); +assertEquals( + 4, + Object.getOwnPropertyNames( + new Intl.RelativeTimeFormat("en").resolvedOptions() + ).length +); assertEquals( 'short', diff --git a/implementation-contributed/v8/mjsunit/asm/regress-920076.js b/implementation-contributed/v8/mjsunit/asm/regress-920076.js new file mode 100644 index 0000000000..754b931cb8 --- /dev/null +++ b/implementation-contributed/v8/mjsunit/asm/regress-920076.js @@ -0,0 +1,13 @@ +// Copyright 2019 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --allow-natives-syntax + +function Module() { + "use asm"; + function f() {} + return f +} +eval("(" + Module.toString().replace(/;/, String.fromCharCode(8233)) + ")();"); +assertFalse(%IsAsmWasmCode(Module)); // Valid asm.js, but we reject Unicode. diff --git a/implementation-contributed/v8/mjsunit/compiler/array-multiple-receiver-maps.js b/implementation-contributed/v8/mjsunit/compiler/array-multiple-receiver-maps.js index 3ddff992f7..c26aeda7dc 100644 --- a/implementation-contributed/v8/mjsunit/compiler/array-multiple-receiver-maps.js +++ b/implementation-contributed/v8/mjsunit/compiler/array-multiple-receiver-maps.js @@ -3,7 +3,7 @@ // found in the LICENSE file. // Flags: --allow-natives-syntax --opt --no-always-opt -// Flags: --no-stress-background-compile +// Flags: --no-stress-background-compile --trace-opt --trace-deopt let id = 0; diff --git a/implementation-contributed/v8/mjsunit/compiler/regress-919754.js b/implementation-contributed/v8/mjsunit/compiler/regress-919754.js new file mode 100644 index 0000000000..5f20aad928 --- /dev/null +++ b/implementation-contributed/v8/mjsunit/compiler/regress-919754.js @@ -0,0 +1,15 @@ +// Copyright 2019 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --allow-natives-syntax + + +function f(get, ...a) { + for (let i = 0; i < 1000; i++) { + if (i === 999) %OptimizeOsr(); + a.map(f); + } + return get(); +} +assertThrows(f); diff --git a/implementation-contributed/v8/mjsunit/es6/block-eval-var-over-let.js b/implementation-contributed/v8/mjsunit/es6/block-eval-var-over-let.js index e16d7a02a6..784f5d2f42 100644 --- a/implementation-contributed/v8/mjsunit/es6/block-eval-var-over-let.js +++ b/implementation-contributed/v8/mjsunit/es6/block-eval-var-over-let.js @@ -141,15 +141,15 @@ try { } assertTrue(caught); -caught = false -try { - (function() { - { - let x = 1; - eval('{ function x() {} }'); - } - })(); -} catch (e) { - caught = true; -} -assertFalse(caught); +// See ES#sec-web-compat-evaldeclarationinstantiation. Sloppy block functions +// inside of blocks in eval behave similar to regular sloppy block function +// hoisting: the var declaration on the function level is only created if +// it would not cause a syntax error. A masking let would cause a conflicting +// var declaration syntax error, and hence the var isn't introduced. +(function() { + { + let x = 1; + eval('{ function x() {} }'); + assertEquals(1, x); + } +})(); diff --git a/implementation-contributed/v8/mjsunit/es6/block-sloppy-function.js b/implementation-contributed/v8/mjsunit/es6/block-sloppy-function.js index d527a7debb..5d22cd85c0 100644 --- a/implementation-contributed/v8/mjsunit/es6/block-sloppy-function.js +++ b/implementation-contributed/v8/mjsunit/es6/block-sloppy-function.js @@ -620,15 +620,12 @@ eval(` return 4; } }`); - // assertEquals(0, f); - assertEquals(4, f()); + assertEquals(0, f); } - // assertEquals(4, f()); - assertEquals(undefined, f); + assertEquals(4, f()); })(); -// This test is incorrect BUG(v8:5168). The commented assertions are correct. (function evalHoistingThroughWith() { with ({f: 0}) { eval(`{ function f() { diff --git a/implementation-contributed/v8/mjsunit/es6/destructuring-assignment.js b/implementation-contributed/v8/mjsunit/es6/destructuring-assignment.js index dee7a0b16d..7f61e023fc 100644 --- a/implementation-contributed/v8/mjsunit/es6/destructuring-assignment.js +++ b/implementation-contributed/v8/mjsunit/es6/destructuring-assignment.js @@ -574,3 +574,58 @@ assertEquals(oz, [1, 2, 3, 4, 5]); assertEquals(1, ext("let x; ({x} = { x: super() })").x); assertEquals(1, ext("let x, y; ({ x: y } = { x } = { x: super() })").x); })(); + +(function testInvalidReturn() { + function* g() { yield 1; } + + let executed_x_setter; + let executed_return; + var a = { + set x(val) { + executed_x_setter = true; + throw 3; + } + }; + + // The exception from the execution of g().return() should be suppressed by + // the setter error. + executed_x_setter = false; + executed_return = false; + g.prototype.return = function() { + executed_return = true; + throw 4; + }; + assertThrowsEquals("[a.x] = g()", 3); + assertTrue(executed_x_setter); + assertTrue(executed_return); + + // The exception from g().return() not returning an object should be + // suppressed by the setter error. + executed_x_setter = false; + executed_return = false; + g.prototype.return = function() { + assertTrue(executed_return); + return null; + }; + assertThrowsEquals("[a.x] = g()", 3); + assertTrue(executed_x_setter); + assertTrue(executed_return); + + // The TypeError from g().return not being a method should suppress the setter + // error. + executed_x_setter = false; + g.prototype.return = "not a method"; + assertThrows("[a.x] = g()", TypeError); + assertTrue(executed_x_setter); + + // The exception from the access of g().return should suppress the setter + // error. + executed_x_setter = false; + Object.setPrototypeOf(g.prototype, { + get return() { + throw 4; + } + }); + assertThrowsEquals("[a.x] = g()", 4); + assertTrue(executed_x_setter); +}) diff --git a/implementation-contributed/v8/mjsunit/es6/unscopables.js b/implementation-contributed/v8/mjsunit/es6/unscopables.js index 782dd2d7a3..d60abc4b4e 100644 --- a/implementation-contributed/v8/mjsunit/es6/unscopables.js +++ b/implementation-contributed/v8/mjsunit/es6/unscopables.js @@ -96,7 +96,10 @@ function TestArrayPrototypeUnscopables() { var fill = 'local fill'; var find = 'local find'; var findIndex = 'local findIndex'; + var flat = 'local flat'; + var flatMap = 'local flatMap'; var keys = 'local keys'; + var includes = 'local includes'; var values = 'local values'; var array = []; @@ -108,6 +111,9 @@ function TestArrayPrototypeUnscopables() { assertEquals('local fill', fill); assertEquals('local find', find); assertEquals('local findIndex', findIndex); + assertEquals('local flat', flat); + assertEquals('local flatMap', flatMap); + assertEquals('local includes', includes); assertEquals('local keys', keys); assertEquals('local values', values); assertEquals(42, toString); diff --git a/implementation-contributed/v8/mjsunit/es8/async-function-stacktrace.js b/implementation-contributed/v8/mjsunit/es8/async-function-stacktrace.js index ab6dd2633b..e9358c2679 100644 --- a/implementation-contributed/v8/mjsunit/es8/async-function-stacktrace.js +++ b/implementation-contributed/v8/mjsunit/es8/async-function-stacktrace.js @@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +// Flags: --noasync-stack-traces + async function test(func, funcs) { try { await func(); @@ -81,21 +83,19 @@ async function runTests() { try { await reject(); } catch (e) { throw new Error("FAIL"); } } }).c4, ["c4"]); - // TODO(caitp): We should infer anonymous async functions as the empty - // string, not as the name of a function they're passed as a parameter to. await test(async x => { throw new Error("FAIL") }, - ["test", "test", "runTests"]); + ["test", "runTests"]); await test(async() => { throw new Error("FAIL") }, - ["test", "test", "runTests"]); + ["test", "runTests"]); await test(async(a) => { throw new Error("FAIL") }, - ["test", "test", "runTests"]); + ["test", "runTests"]); await test(async(a, b) => { throw new Error("FAIL") }, - ["test", "test", "runTests"]); + ["test", "runTests"]); - await test(async x => { await 1; throw new Error("FAIL") }, ["test"]); - await test(async() => { await 1; throw new Error("FAIL") }, ["test"]); - await test(async(a) => { await 1; throw new Error("FAIL") }, ["test"]); - await test(async(a, b) => { await 1; throw new Error("FAIL") }, ["test"]); + await test(async x => { await 1; throw new Error("FAIL") }, []); + await test(async() => { await 1; throw new Error("FAIL") }, []); + await test(async(a) => { await 1; throw new Error("FAIL") }, []); + await test(async(a, b) => { await 1; throw new Error("FAIL") }, []); await test(async x => { await 1; @@ -104,7 +104,7 @@ async function runTests() { } catch (e) { throw new Error("FAIL"); } - }, ["test"]); + }, []); await test(async() => { await 1; @@ -113,7 +113,7 @@ async function runTests() { } catch (e) { throw new Error("FAIL"); } - }, ["test"]); + }, []); await test(async(a) => { await 1; @@ -122,7 +122,7 @@ async function runTests() { } catch (e) { throw new Error("FAIL"); } - }, ["test"]); + }, []); await test(async(a, b) => { await 1; @@ -131,7 +131,7 @@ async function runTests() { } catch (e) { throw new Error("FAIL"); } - }, ["test"]); + }, []); await test(async x => { await 1; @@ -140,7 +140,7 @@ async function runTests() { } catch (e) { throw new Error("FAIL"); } - }, ["test"]); + }, []); await test(async() => { await 1; @@ -149,7 +149,7 @@ async function runTests() { } catch (e) { throw new Error("FAIL"); } - }, ["test"]); + }, []); await test(async(a) => { await 1; @@ -158,7 +158,7 @@ async function runTests() { } catch (e) { throw new Error("FAIL"); } - }, ["test"]); + }, []); await test(async(a, b) => { await 1; @@ -167,7 +167,7 @@ async function runTests() { } catch (e) { throw new Error("FAIL"); } - }, ["test"]); + }, []); } runTests().catch(e => { diff --git a/implementation-contributed/v8/mjsunit/harmony/hashbang-eval.js b/implementation-contributed/v8/mjsunit/harmony/hashbang-eval.js new file mode 100644 index 0000000000..c5040f7bee --- /dev/null +++ b/implementation-contributed/v8/mjsunit/harmony/hashbang-eval.js @@ -0,0 +1,11 @@ +// Copyright 2019 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --harmony-hashbang + +// Hashbang syntax is not allowed in eval. +assertThrows("#!", SyntaxError); +assertThrows("#!\n", SyntaxError); +assertThrows("#!---IGNORED---", SyntaxError); +assertThrows("#!---IGNORED---\n", SyntaxError); diff --git a/implementation-contributed/v8/mjsunit/harmony/private-fields-static.js b/implementation-contributed/v8/mjsunit/harmony/private-fields-static.js new file mode 100644 index 0000000000..e4019cc32e --- /dev/null +++ b/implementation-contributed/v8/mjsunit/harmony/private-fields-static.js @@ -0,0 +1,356 @@ +// Copyright 2018 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --harmony-private-fields --allow-natives-syntax + + +"use strict"; + +{ + class C { + static #a; + static getA() { return this.#a; } + } + + assertEquals(undefined, C.a); + assertEquals(undefined, C.getA()); + + let c = new C; + assertEquals(undefined, c.a); +} + +{ + class C { + static #a = 1; + static getA() { return this.#a; } + } + + assertEquals(undefined, C.a); + assertEquals(1, C.getA()); + + let c = new C; + assertEquals(undefined, c.a); +} + +{ + class C { + static #a = 1; + static #b = this.#a; + static getB() { return this.#b; } + } + + assertEquals(1, C.getB()); + + let c = new C; + assertEquals(undefined, c.getB); +} + +{ + class C { + static #a = 1; + static getA() { return this.#a; } + constructor() { + assertThrows(() => this.#a, TypeError); + C.#a = 2; + } + } + + assertEquals(1, C.getA()); + + let c = new C; + assertThrows(() => C.prototype.getA.call(c)); + assertEquals(2, C.getA()); +} + +{ + class C { + static #a = this; + static #b = () => this; + static getA() { return this.#a; } + static getB() { return this.#b; } + } + + assertSame(C, C.getA()); + assertSame(C, C.getB()()); +} + +{ + class C { + static #a = this; + static #b = function() { return this; }; + static getA() { return this.#a; } + static getB() { return this.#b; } + } + + assertSame(C, C.getA()); + assertSame(C, C.getB().call(C)); + assertSame(undefined, C.getB()()); +} + + +{ + class C { + static #a = function() { return 1 }; + static getA() {return this.#a;} + } + + assertEquals('#a', C.getA().name); +} + +{ + let d = function() { return new.target; } + class C { + static #c = d; + static getC() { return this.#c; } + } + + assertEquals(undefined, C.getC()()); + assertSame(new d, new (C.getC())); +} + +{ + class C { + static #a = 1; + static getA(instance) { return instance.#a; } + } + + class B { } + + assertEquals(undefined, C.a); + assertEquals(1, C.getA(C)); + assertThrows(() => C.getA(B), TypeError); +} + +{ + class A { + static #a = 1; + static getA() { return this.#a; } + } + + class B extends A {} + assertThrows(() => B.getA(), TypeError); +} + +{ + class A { + static #a = 1; + static getA() { return A.#a; } + } + + class B extends A {} + assertSame(1, B.getA()); +} + +{ + let prototypeLookup = false; + class A { + static set a(val) { + prototypeLookup = true; + } + + static get a() { return undefined; } + } + + class C extends A { + static #a = 1; + static getA() { return this.#a; } + } + + assertEquals(1, C.getA()); + assertEquals(false, prototypeLookup); +} + +{ + class A { + static a = 1; + } + + class B extends A { + static #b = this.a; + static getB() { return this.#b; } + } + + assertEquals(1, B.getB()); +} + +{ + class A { + static #a = 1; + static getA() { return this.#a; } + } + + class B extends A { + static getA() { return super.getA(); } + } + + assertThrows(() => B.getA(), TypeError); +} + +{ + class A { + static #a = 1; + static getA() { return this.#a;} + } + + class B extends A { + static #a = 2; + static get_A() { return this.#a;} + } + + assertEquals(1, A.getA()); + assertThrows(() => B.getA(), TypeError); + assertEquals(2, B.get_A()); +} + +{ + let foo = undefined; + class A { + static #a = (function() { foo = 1; })(); + } + + assertEquals(1, foo); +} + +{ + let foo = undefined; + class A extends class {} { + static #a = (function() { foo = 1; })(); + } + + assertEquals(1, foo); +} + +{ + function makeClass() { + return class { + static #a; + static setA(val) { this.#a = val; } + static getA() { return this.#a; } + } + } + + let classA = makeClass(); + let classB = makeClass(); + + assertEquals(undefined, classA.getA()); + assertEquals(undefined, classB.getA()); + + classA.setA(3); + assertEquals(3, classA.getA()); + assertEquals(undefined, classB.getA()); + + classB.setA(5); + assertEquals(3, classA.getA()); + assertEquals(5, classB.getA()); + + assertThrows(() => classA.getA.call(classB), TypeError); + assertThrows(() => classB.getA.call(classA), TypeError); +} + +{ + let value = undefined; + + new class { + static #a = 1; + static getA() { return this.#a; } + + constructor() { + new class C { + static #a = 2; + constructor() { + value = C.#a; + } + } + } + } + + assertEquals(2, value); +} + +{ + class A { + static #a = 1; + static b = class { + static getA() { return this.#a; } + static get_A(val) { return val.#a; } + } + } + + assertEquals(1, A.b.getA.call(A)); + assertEquals(1, A.b.get_A(A)); +} + +{ + assertThrows(() => class { static b = this.#a; static #a = 1 }, TypeError); +} + +{ + let symbol = Symbol(); + + class C { + static #a = 1; + static [symbol] = 1; + static getA() { return this.#a; } + static setA(val) { this.#a = val; } + } + + var p = new Proxy(C, { + get: function(target, name) { + if (typeof(arg) === 'symbol') { + assertFalse(%SymbolIsPrivate(name)); + } + return target[name]; + } + }); + + assertThrows(() => p.getA(), TypeError); + assertThrows(() => p.setA(1), TypeError); + assertEquals(1, p[symbol]); +} + +{ + class C { + static #b = Object.freeze(this); + static getA() { return this.#a; } + static #a = 1; + } + + assertEquals(1, C.getA()); +} + +{ + class C { + static #a = 1; + static getA() { return eval('this.#a'); } + } + + assertEquals(1, C.getA()); +} + +{ + var C; + eval('C = class { static #a = 1; static getA() { return eval(\'this.#a\'); }}'); + + assertEquals(1, C.getA()); +} + +{ + class C { + static #a = 1; + static getA() { return this.#a; } + static setA() { eval('this.#a = 4'); } + } + + assertEquals(1, C.getA()); + C.setA(); + assertEquals(4, C.getA()); +} + +{ + class C { + static getA() { return eval('this.#a'); } + } + + assertThrows(() => C.getA(), SyntaxError); +} diff --git a/implementation-contributed/v8/mjsunit/mjsunit.status b/implementation-contributed/v8/mjsunit/mjsunit.status index 90ea2c7cb2..884c7cca92 100644 --- a/implementation-contributed/v8/mjsunit/mjsunit.status +++ b/implementation-contributed/v8/mjsunit/mjsunit.status @@ -268,6 +268,7 @@ 'regress/regress-trap-allocation-memento': [SKIP], 'regress/regress-2249': [SKIP], 'regress/regress-4121': [SKIP], + 'regress/regress-6989': [SKIP], 'compare-known-objects-slow': [SKIP], 'compiler/array-multiple-receiver-maps': [SKIP], # Tests taking too long @@ -322,7 +323,7 @@ }], # 'gc_stress == True' ############################################################################## -['lite_mode == True', { +['lite_mode', { # Skip tests not suitable for lite_mode. # TODO(8596): We cache the templates in the feedback vector. In lite mode @@ -348,7 +349,38 @@ 'spread-large-string': [SKIP], 'spread-large-array': [SKIP], -}], # 'lite_mode == True' + # TODO(v8:7777): Re-enable once wasm is supported in jitless mode. + 'regress/wasm/*': [SKIP], + 'tools/compiler-trace-flags': [SKIP], + 'wasm/*': [SKIP], + + # Other tests that use asm / wasm / optimized code. + 'asm/asm-heap': [SKIP], + 'asm/asm-validation': [SKIP], + 'asm/call-stdlib': [SKIP], + 'asm/call-annotation': [SKIP], + 'asm/global-imports': [SKIP], + 'asm/regress-913822': [SKIP], + 'asm/return-types': [SKIP], + 'regress/regress-599719': [SKIP], + 'regress/regress-6196': [SKIP], + 'regress/regress-6700': [SKIP], + 'regress/regress-6838-2': [SKIP], + 'regress/regress-6838-3': [SKIP], + + # Timeouts in lite / jitless mode. + 'asm/embenchen/*': [SKIP], + + # Tests that generate code at runtime. + 'code-comments': [SKIP], + 'regress/regress-617526': [SKIP], + 'regress/regress-7893': [SKIP], + 'regress/regress-8377': [SKIP], + 'regress/regress-863810': [SKIP], + 'regress/regress-crbug-721835': [SKIP], + 'regress/regress-crbug-759327': [SKIP], + 'regress/regress-crbug-898974': [SKIP], +}], # 'lite_mode' ############################################################################## ['byteorder == big', { @@ -964,4 +996,11 @@ # crbug.com/v8/7741 'wasm/bigint': [SKIP], }], # arch in [arm, android_arm, android_ia32, ia32, ppc, s390, s390x, mipsel, mips] + +############################################################################## +['arch not in [x64, arm, arm64] or system != linux', { + # Unwinding info writer is only supported on x64, arm, and arm64 Linux + 'regress/regress-913844': [SKIP], +}], + ] diff --git a/implementation-contributed/v8/mjsunit/modules-namespace1.js b/implementation-contributed/v8/mjsunit/modules-namespace1.js index 9c2ce93504..82b1e528ad 100644 --- a/implementation-contributed/v8/mjsunit/modules-namespace1.js +++ b/implementation-contributed/v8/mjsunit/modules-namespace1.js @@ -53,9 +53,9 @@ assertEquals( {value: "Module", configurable: false, writable: false, enumerable: false}, Reflect.getOwnPropertyDescriptor(foo, Symbol.toStringTag)); -// Nonexistant properties. -let nonexistant = ["gaga", 123, Symbol('')]; -for (let key of nonexistant) { +// Nonexistent properties. +let nonexistent = ["gaga", 123, Symbol('')]; +for (let key of nonexistent) { assertSame(undefined, Reflect.getOwnPropertyDescriptor(foo, key)); assertTrue(Reflect.deleteProperty(foo, key)); assertFalse(Reflect.set(foo, key, true)); diff --git a/implementation-contributed/v8/mjsunit/object-seal.js b/implementation-contributed/v8/mjsunit/object-seal.js index f685b41927..265e50abc3 100644 --- a/implementation-contributed/v8/mjsunit/object-seal.js +++ b/implementation-contributed/v8/mjsunit/object-seal.js @@ -389,3 +389,7 @@ Object.seal(Sealed); assertDoesNotThrow(function() { return new Sealed(); }); Sealed.prototype.prototypeExists = true; assertTrue((new Sealed()).prototypeExists); + +obj = new Int32Array(10) +Object.seal(obj); +assertTrue(Object.isSealed(obj)); diff --git a/implementation-contributed/v8/mjsunit/regress-918763.js b/implementation-contributed/v8/mjsunit/regress-918763.js new file mode 100644 index 0000000000..45916f015a --- /dev/null +++ b/implementation-contributed/v8/mjsunit/regress-918763.js @@ -0,0 +1,14 @@ +// Copyright 2019 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --allow-natives-syntax + +function C() {} +C.__proto__ = null; + +function f(c) { return 0 instanceof c; } + +f(C); +%OptimizeFunctionOnNextCall(f); +assertThrows(() => f(0)); diff --git a/implementation-contributed/v8/mjsunit/regress/regress-408036.js b/implementation-contributed/v8/mjsunit/regress/regress-408036.js deleted file mode 100644 index a4dfade25d..0000000000 --- a/implementation-contributed/v8/mjsunit/regress/regress-408036.js +++ /dev/null @@ -1,5 +0,0 @@ -// Copyright 2014 the V8 project authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Flags: --expose-natives-as 1 diff --git a/implementation-contributed/v8/mjsunit/regress/regress-6288.js b/implementation-contributed/v8/mjsunit/regress/regress-6288.js index 96499d9378..5f550c31c8 100644 --- a/implementation-contributed/v8/mjsunit/regress/regress-6288.js +++ b/implementation-contributed/v8/mjsunit/regress/regress-6288.js @@ -4,7 +4,10 @@ // Environment Variables: LC_ALL=pt-BR.UTF8 +// The data files packaged with d8 currently have Brazillian Portuguese +// DateTimeFormat but not Collation + if (this.Intl) { - assertEquals('pt-BR', Intl.Collator().resolvedOptions().locale); + assertEquals('pt', Intl.Collator().resolvedOptions().locale); assertEquals('pt-BR', Intl.DateTimeFormat().resolvedOptions().locale); } diff --git a/implementation-contributed/v8/mjsunit/regress/regress-8630.js b/implementation-contributed/v8/mjsunit/regress/regress-8630.js new file mode 100644 index 0000000000..f51807b4a5 --- /dev/null +++ b/implementation-contributed/v8/mjsunit/regress/regress-8630.js @@ -0,0 +1,32 @@ +// Copyright 2019 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --allow-natives-syntax + +// Parameters can't have parentheses (both patterns and identifiers) +assertThrows("( ({x: 1}) ) => {};", SyntaxError); +assertThrows("( (x) ) => {}", SyntaxError); +assertThrows("( ({x: 1}) = y ) => {}", SyntaxError); +assertThrows("( (x) = y ) => {}", SyntaxError); + +// Declarations can't have parentheses (both patterns and identifiers) +assertThrows("let [({x: 1})] = [];", SyntaxError); +assertThrows("let [(x)] = [];", SyntaxError); +assertThrows("let [({x: 1}) = y] = [];", SyntaxError); +assertThrows("let [(x) = y] = [];", SyntaxError); +assertThrows("var [({x: 1})] = [];", SyntaxError); +assertThrows("var [(x)] = [];", SyntaxError); +assertThrows("var [({x: 1}) = y] = [];", SyntaxError); +assertThrows("var [(x) = y] = [];", SyntaxError); + +// Patterns in can't have parentheses in assignments either +assertThrows("[({x: 1}) = y] = [];", SyntaxError); + +// Parentheses are fine around identifiers in assignments though, even inside a +// pattern +var x; +[(x)] = [2]; +assertEquals(x, 2); +[(x) = 3] = []; +assertEquals(x, 3); diff --git a/implementation-contributed/v8/mjsunit/regress/regress-8659.js b/implementation-contributed/v8/mjsunit/regress/regress-8659.js new file mode 100644 index 0000000000..636c667c79 --- /dev/null +++ b/implementation-contributed/v8/mjsunit/regress/regress-8659.js @@ -0,0 +1,5 @@ +// Copyright 2019 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +assertThrows("const [(x)] = []", SyntaxError); diff --git a/implementation-contributed/v8/mjsunit/regress/regress-897512.js b/implementation-contributed/v8/mjsunit/regress/regress-897512.js index 0e676a06c2..649ee2b922 100644 --- a/implementation-contributed/v8/mjsunit/regress/regress-897512.js +++ b/implementation-contributed/v8/mjsunit/regress/regress-897512.js @@ -20,5 +20,4 @@ assertEquals(o51.length, 39); // Sort triggers the bug. o51.sort(); -// TODO(chromium:897512): The length should be 39. -assertEquals(o51.length, 101); +assertEquals(o51.length, 39); diff --git a/implementation-contributed/v8/mjsunit/regress/regress-913844.js b/implementation-contributed/v8/mjsunit/regress/regress-913844.js new file mode 100644 index 0000000000..3516f35126 --- /dev/null +++ b/implementation-contributed/v8/mjsunit/regress/regress-913844.js @@ -0,0 +1,7 @@ +// Copyright 2018 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --disable-in-process-stack-traces --perf-prof-unwinding-info --turbo-loop-rotation +for (var x = 0; x < 1000000; x++) +; diff --git a/implementation-contributed/v8/mjsunit/regress/regress-917215.js b/implementation-contributed/v8/mjsunit/regress/regress-917215.js new file mode 100644 index 0000000000..e8d7e10462 --- /dev/null +++ b/implementation-contributed/v8/mjsunit/regress/regress-917215.js @@ -0,0 +1,6 @@ +// Copyright 2019 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +a: if (true) b: { break a; break b; } +else b: { break a; break b; } diff --git a/implementation-contributed/v8/mjsunit/regress/regress-917755.js b/implementation-contributed/v8/mjsunit/regress/regress-917755.js new file mode 100644 index 0000000000..49803ae2d3 --- /dev/null +++ b/implementation-contributed/v8/mjsunit/regress/regress-917755.js @@ -0,0 +1,12 @@ +// Copyright 2019 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +{ + function a() {} +} + +{ + let a; + function a() {}; +} diff --git a/implementation-contributed/v8/mjsunit/regress/regress-917988.js b/implementation-contributed/v8/mjsunit/regress/regress-917988.js new file mode 100644 index 0000000000..e9a8458edd --- /dev/null +++ b/implementation-contributed/v8/mjsunit/regress/regress-917988.js @@ -0,0 +1,31 @@ +// Copyright 2018 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Tests if class declarations in parameter list are correctly handled. +function v_2( +v_3 = class v_4 { + get [[] = ';']() { } +} +) { } +v_2(); + +// Test object inside a class in a parameter list +(function f( +v_3 = class v_4 { + get [{} = ';']() { } +} +) { })(); + +// Test destructuring of class in parameters +(function f( {p, q} = class C { get [[] = ';']() {} } ) {})(); + +// Test array destructuring of class in parameters +class C {}; +C[Symbol.iterator] = function() { + return { + next: function() { return { done: true }; }, + _first: true + }; +}; +(function f1([p, q] = class D extends C { get [[]]() {} }) { })(); diff --git a/implementation-contributed/v8/mjsunit/regress/regress-919340.js b/implementation-contributed/v8/mjsunit/regress/regress-919340.js new file mode 100644 index 0000000000..900bf6fde2 --- /dev/null +++ b/implementation-contributed/v8/mjsunit/regress/regress-919340.js @@ -0,0 +1,17 @@ +// Copyright 2019 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --allow-natives-syntax --opt + +var E = 'Σ'; +var PI = 123; +function f() { + print(E = 2, /b/.test(E) || /b/.test(E = 2)); + ((E = 3) * PI); +} + +f(); +f(); +%OptimizeFunctionOnNextCall(f); +f(); diff --git a/implementation-contributed/v8/mjsunit/regress/regress-919710.js b/implementation-contributed/v8/mjsunit/regress/regress-919710.js new file mode 100644 index 0000000000..11422958af --- /dev/null +++ b/implementation-contributed/v8/mjsunit/regress/regress-919710.js @@ -0,0 +1,5 @@ +// Copyright 2019 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +assertThrows("( let ) => { 'use strict'; let }", SyntaxError) diff --git a/implementation-contributed/v8/mjsunit/regress/regress-921382.js b/implementation-contributed/v8/mjsunit/regress/regress-921382.js new file mode 100644 index 0000000000..d7cce2b723 --- /dev/null +++ b/implementation-contributed/v8/mjsunit/regress/regress-921382.js @@ -0,0 +1,5 @@ +// Copyright 2019 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +assertThrows("(d * f * g) * e => 0", SyntaxError) diff --git a/implementation-contributed/v8/mjsunit/regress/regress-crbug-860788.js b/implementation-contributed/v8/mjsunit/regress/regress-crbug-860788.js index 55d243eac6..fe0dcb83af 100644 --- a/implementation-contributed/v8/mjsunit/regress/regress-crbug-860788.js +++ b/implementation-contributed/v8/mjsunit/regress/regress-crbug-860788.js @@ -26,5 +26,5 @@ try { } catch(e) { print("Caught: " + e); } try { var obj = {prop: 7}; - assertThrows("nonexistant(obj)"); + assertThrows("nonexistent(obj)"); } catch(e) { print("Caught: " + e); } diff --git a/implementation-contributed/v8/mjsunit/regress/regress-crbug-917076.js b/implementation-contributed/v8/mjsunit/regress/regress-crbug-917076.js new file mode 100644 index 0000000000..7c19c02204 --- /dev/null +++ b/implementation-contributed/v8/mjsunit/regress/regress-crbug-917076.js @@ -0,0 +1,20 @@ +// Copyright 2019 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --allow-natives-syntax + +let speciesCounter = 0; + +Object.defineProperty(Promise, Symbol.species, { + value: function(...args) { + speciesCounter++; + return new Promise(...args); + } +}); + +async function foo() { } + +assertPromiseResult(Promise.all([foo()]), () => { + assertEquals(3, speciesCounter); +}); diff --git a/implementation-contributed/v8/mjsunit/regress/regress-crbug-917980.js b/implementation-contributed/v8/mjsunit/regress/regress-crbug-917980.js new file mode 100644 index 0000000000..18dc782400 --- /dev/null +++ b/implementation-contributed/v8/mjsunit/regress/regress-crbug-917980.js @@ -0,0 +1,33 @@ +// Copyright 2018 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --allow-natives-syntax + +const constructors = [ + [Uint8Array, [0, 1]], + [Int8Array, [0, 1]], + [Uint16Array, [0, 1]], + [Int16Array, [0, 1]], + [Uint32Array, [0, 1]], + [Int32Array, [0, 1]], + [Float32Array, [0, 1]], + [Float64Array, [0, 1]], + [Uint8ClampedArray, [0, 1]], + [BigInt64Array, [0n, 1n]], + [BigUint64Array, [0n, 1n]] +]; + +let typedArray; + +const separator = { + toString() { + %ArrayBufferDetach(typedArray.buffer); + return '*'; + } +}; + +constructors.forEach(([constructor, arr]) => { + typedArray = new constructor(arr); + assertSame(typedArray.join(separator), '*'); +}); diff --git a/implementation-contributed/v8/mjsunit/regress/regress-crbug-920184.js b/implementation-contributed/v8/mjsunit/regress/regress-crbug-920184.js new file mode 100644 index 0000000000..c38f181750 --- /dev/null +++ b/implementation-contributed/v8/mjsunit/regress/regress-crbug-920184.js @@ -0,0 +1,14 @@ +// Copyright 2019 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --verify-heap --enable-slow-asserts + +var Ctor = function() { + return []; +}; +var a = ["one", "two", "three"]; +a.constructor = {}; +a.constructor[Symbol.species] = Ctor; + +a.filter(function() { return true; }); diff --git a/implementation-contributed/v8/mjsunit/regress/regress-loop-var-assign-without-block-scope.js b/implementation-contributed/v8/mjsunit/regress/regress-loop-var-assign-without-block-scope.js new file mode 100644 index 0000000000..8c85c1380f --- /dev/null +++ b/implementation-contributed/v8/mjsunit/regress/regress-loop-var-assign-without-block-scope.js @@ -0,0 +1,14 @@ +// Copyright 2019 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --allow-natives-syntax +function f() { + // Loop with a body that's not wrapped in a block. + for (i = 0; i < 2; i++) + var x = i, // var x that's assigned on each iteration + y = y||(()=>x), // single arrow function that returns x + z = (%OptimizeFunctionOnNextCall(y), y()); // optimize y on first iteration + return y() +}; +assertEquals(1, f()) diff --git a/implementation-contributed/v8/mjsunit/regress/regress-sloppy-block-function-hoisting-dynamic.js b/implementation-contributed/v8/mjsunit/regress/regress-sloppy-block-function-hoisting-dynamic.js new file mode 100644 index 0000000000..59758eda5e --- /dev/null +++ b/implementation-contributed/v8/mjsunit/regress/regress-sloppy-block-function-hoisting-dynamic.js @@ -0,0 +1,6 @@ +// Copyright 2019 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +with({}) { eval("{function f(){f}}") }; +f() diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-905815.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-905815.js new file mode 100644 index 0000000000..7967d99756 --- /dev/null +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-905815.js @@ -0,0 +1,27 @@ +// Copyright 2018 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +load('test/mjsunit/wasm/wasm-constants.js'); +load('test/mjsunit/wasm/wasm-module-builder.js'); + +(function() { + const builder = new WasmModuleBuilder(); + builder.addType(makeSig([], [])); + builder.addType(makeSig([kWasmI32], [kWasmI32])); + builder.addFunction(undefined, 0 /* sig */) + .addBodyWithEnd([ + kExprEnd, // @1 + ]); + builder.addFunction(undefined, 1 /* sig */) + .addLocals({i32_count: 65}) + .addBodyWithEnd([ + kExprLoop, kWasmStmt, // @3 + kSimdPrefix, + kExprF32x4Min, + kExprI64UConvertI32, + kExprI64RemS, + kExprUnreachable, + kExprLoop, 0x02, // @10 + ]); +}) diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-917412.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-917412.js new file mode 100644 index 0000000000..fd7ab99020 --- /dev/null +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-917412.js @@ -0,0 +1,34 @@ +// Copyright 2018 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +load('test/mjsunit/wasm/wasm-constants.js'); +load('test/mjsunit/wasm/wasm-module-builder.js'); + +const builder = new WasmModuleBuilder(); +const sig = builder.addType(makeSig([kWasmI32, kWasmI64], [])); +builder.addFunction(undefined, sig) + .addBody([ +kExprI32Const, 0, +kExprIf, kWasmI32, + kExprI32Const, 0, +kExprElse, + kExprI32Const, 1, + kExprEnd, +kExprTeeLocal, 0, +kExprGetLocal, 0, +kExprLoop, kWasmStmt, + kExprI64Const, 0x80, 0x80, 0x80, 0x70, + kExprSetLocal, 0x01, + kExprI32Const, 0x00, + kExprIf, kWasmI32, + kExprI32Const, 0x00, + kExprElse, + kExprI32Const, 0x00, + kExprEnd, + kExprBrIf, 0x00, + kExprUnreachable, + kExprEnd, +kExprUnreachable, +]); +builder.instantiate(); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-917588.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-917588.js new file mode 100644 index 0000000000..cb07bb5280 --- /dev/null +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-917588.js @@ -0,0 +1,26 @@ +// Copyright 2018 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +load('test/mjsunit/wasm/wasm-constants.js'); +load('test/mjsunit/wasm/wasm-module-builder.js'); + +const builder = new WasmModuleBuilder(); +const sig = builder.addType(makeSig([], [kWasmF64])); +builder.addFunction(undefined, sig) + .addLocals({f32_count: 5}).addLocals({f64_count: 3}) + .addBody([ +kExprBlock, kWasmF64, + kExprF64Const, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x3f, + kExprF64Const, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + kExprI32Const, 0, + kExprIf, kWasmI32, + kExprI32Const, 0, + kExprElse, + kExprI32Const, 1, + kExprEnd, + kExprBrIf, 0, + kExprUnreachable, +kExprEnd +]); +builder.instantiate(); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-917588b.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-917588b.js new file mode 100644 index 0000000000..9d461cfd84 --- /dev/null +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-917588b.js @@ -0,0 +1,55 @@ +// Copyright 2019 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +load('test/mjsunit/wasm/wasm-constants.js'); +load('test/mjsunit/wasm/wasm-module-builder.js'); + +const builder = new WasmModuleBuilder(); +const sig0 = builder.addType(makeSig([kWasmF32], [kWasmI32])); +const sig1 = builder.addType(makeSig([kWasmI64, kWasmI32, kWasmI64, kWasmF32, kWasmI64], [kWasmF32])); +const sig2 = builder.addType(makeSig([kWasmF32], [kWasmF32])); +// Generate function 1 (out of 3). +builder.addFunction(undefined, sig0).addBody([kExprI32Const, 0x00]); +// Generate function 2 (out of 3). +builder.addFunction(undefined, sig1) + .addBody([ + // signature: f_lilfl + kExprBlock, kWasmF32, // @1 f32 + kExprI32Const, 0x00, + kExprIf, kWasmStmt, // @5 + kExprLoop, kWasmStmt, // @7 + kExprBlock, kWasmI32, // @9 i32 + kExprF32Const, 0x00, 0x00, 0x80, 0xc1, + kExprF32Const, 0x00, 0x00, 0x80, 0x45, + kExprCallFunction, 0x00, // function #0: i_f + kExprBrIf, 0x03, // depth=3 + kExprDrop, + kExprI32Const, 0xd8, 0x00, + kExprEnd, // @29 + kExprBrIf, 0x00, // depth=0 + kExprEnd, // @32 + kExprF32Const, 0x00, 0x00, 0x80, 0x3f, + kExprF32Const, 0x00, 0x00, 0x80, 0xc6, + kExprBlock, kWasmI32, // @43 i32 + kExprF32Const, 0x00, 0x00, 0x80, 0x3f, + kExprCallFunction, 0x02, // function #2: f_f + kExprDrop, + kExprI32Const, 0x68, + kExprEnd, // @55 + kExprBrIf, 0x01, // depth=1 + kExprI32Const, 0x00, + kExprSelect, + kExprDrop, + kExprUnreachable, + kExprElse, // @63 + kExprNop, + kExprEnd, // @65 + kExprF32Const, 0x00, 0x00, 0x69, 0x43, + kExprEnd // @71 +]); +// Generate function 3 (out of 3). +builder.addFunction(undefined, sig2).addBody([ + kExprF32Const, 0x00, 0x00, 0x80, 0x3f +]); +builder.instantiate(); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-918149.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-918149.js new file mode 100644 index 0000000000..f19a26d2a3 --- /dev/null +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-918149.js @@ -0,0 +1,12 @@ +// Copyright 2019 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +load('test/mjsunit/wasm/wasm-constants.js'); +load('test/mjsunit/wasm/wasm-module-builder.js'); + +const builder = new WasmModuleBuilder(); +const sig = + builder.addType(makeSig([kWasmI32, kWasmI32, kWasmI32], [kWasmI64])); +builder.addFunction('main', sig).addBody([kExprI64Const, 1, kExprI64SExtendI8]); +builder.instantiate(); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-918284.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-918284.js new file mode 100644 index 0000000000..05614edf3c --- /dev/null +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-918284.js @@ -0,0 +1,21 @@ +// Copyright 2019 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +load('test/mjsunit/wasm/wasm-constants.js'); +load('test/mjsunit/wasm/wasm-module-builder.js'); + +const builder = new WasmModuleBuilder(); +builder.addFunction(undefined, kSig_i_i) + .addLocals({i32_count: 7}) + .addBody([ + kExprI32Const, 0, + kExprIf, kWasmI32, // @11 i32 + kExprI32Const, 0, + kExprElse, // @15 + kExprI32Const, 1, + kExprEnd, // @18 + kExprTeeLocal, 0, + kExprI32Popcnt +]); +builder.instantiate(); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-918917.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-918917.js new file mode 100644 index 0000000000..725287ae74 --- /dev/null +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-918917.js @@ -0,0 +1,22 @@ +// Copyright 2019 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +load('test/mjsunit/wasm/wasm-constants.js'); +load('test/mjsunit/wasm/wasm-module-builder.js'); + +const builder = new WasmModuleBuilder(); +builder.addFunction(undefined, kSig_v_v) + .addLocals({i32_count: 1}).addLocals({f32_count: 1}).addLocals({f64_count: 1}) + .addBody([ +kExprGetLocal, 1, +kExprGetLocal, 2, +kExprGetLocal, 0, +kExprIf, kWasmI32, + kExprI32Const, 1, +kExprElse, + kExprUnreachable, + kExprEnd, +kExprUnreachable +]); +builder.instantiate(); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-919308.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-919308.js new file mode 100644 index 0000000000..cb10662290 --- /dev/null +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-919308.js @@ -0,0 +1,37 @@ +// Copyright 2019 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +load('test/mjsunit/wasm/wasm-constants.js'); +load('test/mjsunit/wasm/wasm-module-builder.js'); + +const builder = new WasmModuleBuilder(); +builder.addFunction(undefined, kSig_i_i) + .addLocals({i32_count: 5}) + .addBody([ + kExprGetLocal, 0, // --> 1 + kExprIf, kWasmI32, + kExprGetLocal, 0, // --> 1 + kExprElse, + kExprUnreachable, + kExprEnd, + kExprIf, kWasmI32, + kExprGetLocal, 0, // --> 1 + kExprElse, + kExprUnreachable, + kExprEnd, + kExprIf, kWasmI32, + kExprI32Const, 0, + kExprGetLocal, 0, + kExprI32Sub, // --> -1 + kExprGetLocal, 0, + kExprGetLocal, 0, + kExprI32Sub, // --> 0 + kExprI32Sub, // --> -1 + kExprElse, + kExprUnreachable, + kExprEnd +]); +builder.addExport('main', 0); +const instance = builder.instantiate(); +assertEquals(-1, instance.exports.main(1)); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-919533.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-919533.js new file mode 100644 index 0000000000..58273f666b --- /dev/null +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-919533.js @@ -0,0 +1,25 @@ +// Copyright 2019 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +load('test/mjsunit/wasm/wasm-constants.js'); +load('test/mjsunit/wasm/wasm-module-builder.js'); + +const builder = new WasmModuleBuilder(); +builder.addFunction(undefined, kSig_v_v).addBody([]); +builder.addFunction(undefined, kSig_i_i) + .addBody([ + kExprGetLocal, 0, + kExprGetLocal, 0, + // Stack now contains two copies of the first param register. + // Start a loop to create a merge point (values still in registers). + kExprLoop, kWasmStmt, + // The call spills all values. + kExprCallFunction, 0, + // Break to the loop. Now the spilled values need to be loaded back *into + // the same register*. + kExprBr, 0, + kExprEnd, + kExprDrop +]); +builder.instantiate(); diff --git a/implementation-contributed/v8/mjsunit/regress/wasm/regress-922432.js b/implementation-contributed/v8/mjsunit/regress/wasm/regress-922432.js new file mode 100644 index 0000000000..8f1ad11ebc --- /dev/null +++ b/implementation-contributed/v8/mjsunit/regress/wasm/regress-922432.js @@ -0,0 +1,21 @@ +// Copyright 2019 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --experimental-wasm-eh + +load("test/mjsunit/wasm/wasm-constants.js"); +load("test/mjsunit/wasm/wasm-module-builder.js"); + +(function TestTruncatedBrOnExnInLoop() { + let builder = new WasmModuleBuilder(); + let fun = builder.addFunction(undefined, kSig_v_v) + .addLocals({except_count: 1}) + .addBody([ + kExprLoop, kWasmStmt, + kExprGetLocal, 0, + kExprBrOnExn // Bytecode truncated here. + ]).exportFunc(); + fun.body.pop(); // Pop implicitly added kExprEnd from body. + assertThrows(() => builder.instantiate(), WebAssembly.CompileError); +})(); diff --git a/implementation-contributed/v8/mjsunit/testcfg.py b/implementation-contributed/v8/mjsunit/testcfg.py index 422210365e..901d8e90a4 100644 --- a/implementation-contributed/v8/mjsunit/testcfg.py +++ b/implementation-contributed/v8/mjsunit/testcfg.py @@ -81,9 +81,6 @@ class TestSuite(testsuite.TestSuite): def _test_class(self): return TestCase - def _suppressed_test_class(self): - return SuppressedTestCase - class TestCase(testcase.D8TestCase): def __init__(self, *args, **kwargs): @@ -282,27 +279,5 @@ class CombinedTest(testcase.D8TestCase): test._get_statusfile_flags() for test in self._tests) -class SuppressedTestCase(TestCase): - """The same as a standard mjsunit test case with all asserts as no-ops.""" - def __init__(self, *args, **kwargs): - super(SuppressedTestCase, self).__init__(*args, **kwargs) - self._mjsunit_files.append( - os.path.join(self.suite.root, "mjsunit_suppressions.js")) - - def _prepare_outcomes(self, *args, **kwargs): - super(SuppressedTestCase, self)._prepare_outcomes(*args, **kwargs) - # Skip tests expected to fail. We suppress all asserts anyways, but some - # tests are expected to fail with type errors or even dchecks, and we - # can't differentiate that. - if statusfile.FAIL in self._statusfile_outcomes: - self._statusfile_outcomes = [statusfile.SKIP] - - def _get_extra_flags(self, *args, **kwargs): - return ( - super(SuppressedTestCase, self)._get_extra_flags(*args, **kwargs) + - ['--disable-abortjs'] - ) - - def GetSuite(*args, **kwargs): return TestSuite(*args, **kwargs) diff --git a/implementation-contributed/v8/test262/test262.status b/implementation-contributed/v8/test262/test262.status index deb63febad..fae6692cb8 100644 --- a/implementation-contributed/v8/test262/test262.status +++ b/implementation-contributed/v8/test262/test262.status @@ -142,38 +142,6 @@ 'language/eval-code/direct/var-env-lower-lex-catch-non-strict': [FAIL], # https://bugs.chromium.org/p/v8/issues/detail?id=4951 - 'language/expressions/assignment/dstr-array-elem-iter-rtrn-close-err': [FAIL], - 'language/expressions/assignment/dstr-array-elem-iter-thrw-close': [FAIL], - 'language/expressions/assignment/dstr-array-elem-iter-thrw-close-err': [FAIL], - 'language/expressions/assignment/dstr-array-elem-trlg-iter-list-thrw-close': [FAIL], - 'language/expressions/assignment/dstr-array-elem-trlg-iter-list-thrw-close-err': [FAIL], - 'language/expressions/assignment/dstr-array-elem-trlg-iter-rest-rtrn-close': [FAIL], - 'language/expressions/assignment/dstr-array-elem-trlg-iter-rest-rtrn-close-err': [FAIL], - 'language/expressions/assignment/dstr-array-elem-trlg-iter-rest-rtrn-close-null': [FAIL], - 'language/expressions/assignment/dstr-array-elem-trlg-iter-rest-thrw-close': [FAIL], - 'language/expressions/assignment/dstr-array-elem-trlg-iter-rest-thrw-close-err': [FAIL], - 'language/expressions/assignment/dstr-array-rest-iter-rtrn-close': [FAIL], - 'language/expressions/assignment/dstr-array-rest-iter-rtrn-close-err': [FAIL], - 'language/expressions/assignment/dstr-array-rest-iter-rtrn-close-null': [FAIL], - 'language/expressions/assignment/dstr-array-rest-iter-thrw-close': [FAIL], - 'language/expressions/assignment/dstr-array-rest-iter-thrw-close-err': [FAIL], - 'language/expressions/assignment/dstr-array-rest-lref-err': [FAIL], - 'language/statements/for-of/dstr-array-elem-iter-rtrn-close-err': [FAIL], - 'language/statements/for-of/dstr-array-elem-iter-thrw-close': [FAIL], - 'language/statements/for-of/dstr-array-elem-iter-thrw-close-err': [FAIL], - 'language/statements/for-of/dstr-array-elem-trlg-iter-list-thrw-close': [FAIL], - 'language/statements/for-of/dstr-array-elem-trlg-iter-list-thrw-close-err': [FAIL], - 'language/statements/for-of/dstr-array-elem-trlg-iter-rest-rtrn-close': [FAIL], - 'language/statements/for-of/dstr-array-elem-trlg-iter-rest-rtrn-close-err': [FAIL], - 'language/statements/for-of/dstr-array-elem-trlg-iter-rest-rtrn-close-null': [FAIL], - 'language/statements/for-of/dstr-array-elem-trlg-iter-rest-thrw-close': [FAIL], - 'language/statements/for-of/dstr-array-elem-trlg-iter-rest-thrw-close-err': [FAIL], - 'language/statements/for-of/dstr-array-rest-iter-rtrn-close': [FAIL], - 'language/statements/for-of/dstr-array-rest-iter-rtrn-close-err': [FAIL], - 'language/statements/for-of/dstr-array-rest-iter-rtrn-close-null': [FAIL], - 'language/statements/for-of/dstr-array-rest-iter-thrw-close': [FAIL], - 'language/statements/for-of/dstr-array-rest-iter-thrw-close-err': [FAIL], - 'language/statements/for-of/dstr-array-rest-lref-err': [FAIL], 'language/expressions/assignment/destructuring/iterator-destructuring-property-reference-target-evaluation-order': [FAIL], 'language/expressions/assignment/destructuring/keyed-destructuring-property-reference-target-evaluation-order': [FAIL], @@ -420,19 +388,6 @@ # https://bugs.chromium.org/p/v8/issues/detail?id=5116 'built-ins/TypedArray/prototype/fill/fill-values-conversion-operations-consistent-nan': [PASS, FAIL], - # https://bugs.chromium.org/p/v8/issues/detail?id=5135 - 'annexB/language/eval-code/direct/func-block-decl-eval-func-block-scoping': [FAIL], - 'annexB/language/eval-code/direct/func-if-decl-else-decl-a-eval-func-block-scoping': [FAIL], - 'annexB/language/eval-code/direct/func-if-decl-else-decl-b-eval-func-block-scoping': [FAIL], - 'annexB/language/eval-code/direct/func-if-decl-else-stmt-eval-func-block-scoping': [FAIL], - 'annexB/language/eval-code/direct/func-if-decl-no-else-eval-func-block-scoping': [FAIL], - 'annexB/language/eval-code/direct/func-if-stmt-else-decl-eval-func-block-scoping': [FAIL], - 'annexB/language/eval-code/direct/func-switch-case-eval-func-block-scoping': [FAIL], - 'annexB/language/eval-code/direct/func-switch-dflt-eval-func-block-scoping': [FAIL], - - # https://bugs.chromium.org/p/v8/issues/detail?id=5139 - 'annexB/built-ins/Date/prototype/setYear/year-number-relative': [FAIL], - # https://bugs.chromium.org/p/v8/issues/detail?id=4698 'language/expressions/call/tco-call-args': [SKIP], 'language/expressions/call/tco-cross-realm-class-construct': [SKIP], @@ -479,16 +434,6 @@ 'built-ins/TypedArrayConstructors/internals/Set/key-is-out-of-bounds': [FAIL], 'built-ins/TypedArrayConstructors/internals/Set/BigInt/key-is-out-of-bounds': [FAIL], - # https://bugs.chromium.org/p/v8/issues/detail?id=5112 - 'annexB/language/eval-code/direct/func-block-decl-eval-func-no-skip-try': [FAIL], - 'annexB/language/eval-code/direct/func-if-decl-else-decl-a-eval-func-no-skip-try': [FAIL], - 'annexB/language/eval-code/direct/func-if-decl-else-decl-b-eval-func-no-skip-try': [FAIL], - 'annexB/language/eval-code/direct/func-if-decl-else-stmt-eval-func-no-skip-try': [FAIL], - 'annexB/language/eval-code/direct/func-if-decl-no-else-eval-func-no-skip-try': [FAIL], - 'annexB/language/eval-code/direct/func-if-stmt-else-decl-eval-func-no-skip-try': [FAIL], - 'annexB/language/eval-code/direct/func-switch-case-eval-func-no-skip-try': [FAIL], - 'annexB/language/eval-code/direct/func-switch-dflt-eval-func-no-skip-try': [FAIL], - # SharedArrayBuffer tests that require flags 'built-ins/SharedArrayBuffer/*': ['--harmony-sharedarraybuffer'], 'built-ins/Atomics/*': ['--harmony-sharedarraybuffer'], @@ -561,13 +506,15 @@ 'language/expressions/call/eval-spread-empty-leading': [FAIL], 'language/expressions/call/eval-spread-empty-trailing': [FAIL], + # https://bugs.chromium.org/p/v8/issues/detail?id=8398 + 'intl402/supportedLocalesOf-returned-array-elements-are-frozen': [FAIL], + 'intl402/ListFormat/constructor/supportedLocalesOf/result-type': [FAIL], + 'intl402/RelativeTimeFormat/constructor/supportedLocalesOf/result-type': [FAIL], + 'intl402/Segmenter/constructor/supportedLocalesOf/result-type': [FAIL], + # https://bugs.chromium.org/p/v8/issues/detail?id=7472 'intl402/NumberFormat/currency-digits': [FAIL], - # https://bugs.chromium.org/p/v8/issues/detail?id=7474 - 'intl402/NumberFormat/prototype/format/format-fraction-digits': [FAIL], - 'intl402/NumberFormat/prototype/format/format-significant-digits': [FAIL], - # https://bugs.chromium.org/p/v8/issues/detail?id=7482 'intl402/DateTimeFormat/prototype/resolvedOptions/resolved-locale-with-hc-unicode': [FAIL], @@ -577,9 +524,6 @@ # https://bugs.chromium.org/p/v8/issues/detail?id=7669 'intl402/Intl/getCanonicalLocales/canonicalized-tags': [FAIL], - # https://github.com/tc39/ecma402/issues/223 - 'intl402/Collator/missing-unicode-ext-value-defaults-to-true': [FAIL], - # https://bugs.chromium.org/p/v8/issues/detail?id=8260 'intl402/Locale/constructor-non-iana-canon': [FAIL], @@ -592,17 +536,6 @@ # https://bugs.chromium.org/p/v8/issues/detail?id=8246 'intl402/Locale/constructor-tag': [FAIL], - # https://bugs.chromium.org/p/v8/issues/detail?id=8244 - 'intl402/Locale/constructor-getter-order': [FAIL], - 'intl402/Locale/constructor-locale-object': [FAIL], - 'intl402/Locale/constructor-options-language-grandfathered': [FAIL], - 'intl402/Locale/constructor-options-language-invalid': [FAIL], - 'intl402/Locale/constructor-options-region-invalid': [FAIL], - 'intl402/Locale/constructor-options-region-valid': [FAIL], - 'intl402/Locale/constructor-options-script-invalid': [FAIL], - 'intl402/Locale/constructor-options-script-valid': [FAIL], - 'intl402/Locale/getters': [FAIL], - # https://bugs.chromium.org/p/v8/issues/detail?id=8243 'intl402/Locale/extensions-private': [FAIL], 'intl402/Locale/getters-privateuse': [FAIL], @@ -615,6 +548,9 @@ 'intl402/Locale/getters-grandfathered': [FAIL], 'intl402/Locale/likely-subtags-grandfathered': [FAIL], + # https://bugs.chromium.org/p/v8/issues/detail?id=8613 + 'intl402/RelativeTimeFormat/prototype/resolvedOptions/order': [FAIL], + # https://bugs.chromium.org/p/v8/issues/detail?id=6705 'built-ins/Object/assign/strings-and-symbol-order': [FAIL], @@ -624,9 +560,6 @@ 'language/expressions/async-generator/generator-created-after-decl-inst': [FAIL], 'language/statements/async-generator/generator-created-after-decl-inst': [FAIL], - # https://bugs.chromium.org/p/v8/issues/detail?id=8099 - 'intl402/NumberFormat/prototype/format/format-negative-numbers': [FAIL], - # await tests that require flags 'language/expressions/await/async-generator-interleaved': ['--harmony-await-optimization'], 'language/expressions/await/await-monkey-patched-promise': ['--harmony-await-optimization'], @@ -646,7 +579,6 @@ # https://bugs.chromium.org/p/v8/issues/detail?id=8258 'intl402/Locale/constructor-options-language-valid-undefined': [FAIL], - 'intl402/Locale/constructor-options-throwing-getters': [FAIL], 'intl402/NumberFormat/prototype/format/format-fraction-digits-precision': [FAIL], 'intl402/NumberFormat/prototype/format/format-significant-digits-precision': [FAIL], diff --git a/implementation-contributed/v8/wasm-js/wasm-js.status b/implementation-contributed/v8/wasm-js/wasm-js.status index 4593a73c6e..856a50aed0 100644 --- a/implementation-contributed/v8/wasm-js/wasm-js.status +++ b/implementation-contributed/v8/wasm-js/wasm-js.status @@ -9,8 +9,11 @@ 'table/grow': [FAIL], 'table/get-set': [FAIL], 'module/customSections': [FAIL], - 'global/constructor': [FAIL], - 'global/value-get-set': [FAIL], +}], # ALWAYS + +[ALWAYS, { + # https://bugs.chromium.org/p/v8/issues/detail?id=8633 + 'limits': [SKIP], }], # ALWAYS ['arch == s390 or arch == s390x or system == aix', { @@ -18,4 +21,10 @@ 'instance/constructor': [SKIP], }], # 'arch == s390 or arch == s390x or system == aix' +############################################################################## +['lite_mode', { + # TODO(v8:7777): Re-enable once wasm is supported in jitless mode. + '*': [SKIP], +}], # lite_mode + ]