1
0
mirror of https://github.com/tc39/test262.git synced 2025-04-08 19:35:28 +02:00

Merge pull request from test262-automation/v8-test262-automation-export-ad1b4aadf8

Import test changes from V8
This commit is contained in:
Leo Balter 2019-02-04 12:04:39 -07:00 committed by GitHub
commit 04ae1c1359
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
54 changed files with 1283 additions and 164 deletions

@ -1,5 +1,5 @@
{
"sourceRevisionAtLastExport": "f88d169e",
"targetRevisionAtLastExport": "ad1b4aadf8",
"sourceRevisionAtLastExport": "f85a3554",
"targetRevisionAtLastExport": "6bb8f41e0a",
"curatedFiles": {}
}

@ -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);

@ -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', {

@ -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');

@ -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);

@ -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'));

@ -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)

@ -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
);

@ -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',

@ -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.

@ -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;

@ -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);

@ -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);
}
})();

@ -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() {

@ -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);
})

@ -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);

@ -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 => {

@ -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);

@ -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);
}

@ -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],
}],
]

@ -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));

@ -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));

@ -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));

@ -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

@ -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);
}

@ -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);

@ -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);

@ -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);

@ -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++)
;

@ -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; }

@ -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() {};
}

@ -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 [[]]() {} }) { })();

@ -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();

@ -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)

@ -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)

@ -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); }

@ -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);
});

@ -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), '*');
});

@ -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; });

@ -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())

@ -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()

@ -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
]);
})

@ -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();

@ -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();

@ -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();

@ -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();

@ -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();

@ -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();

@ -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));

@ -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();

@ -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);
})();

@ -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)

@ -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],

@ -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
]