summaryrefslogtreecommitdiffstats
path: root/js/src/tests/test262/language/statements/labeled
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/tests/test262/language/statements/labeled')
-rw-r--r--js/src/tests/test262/language/statements/labeled/S12.12_A1_T1.js23
-rw-r--r--js/src/tests/test262/language/statements/labeled/browser.js0
-rw-r--r--js/src/tests/test262/language/statements/labeled/continue.js28
-rw-r--r--js/src/tests/test262/language/statements/labeled/cptn-break.js21
-rw-r--r--js/src/tests/test262/language/statements/labeled/cptn-nrml.js22
-rw-r--r--js/src/tests/test262/language/statements/labeled/decl-async-function.js21
-rw-r--r--js/src/tests/test262/language/statements/labeled/decl-async-generator.js21
-rw-r--r--js/src/tests/test262/language/statements/labeled/decl-cls.js15
-rw-r--r--js/src/tests/test262/language/statements/labeled/decl-const.js15
-rw-r--r--js/src/tests/test262/language/statements/labeled/decl-fun-strict-strict.js19
-rw-r--r--js/src/tests/test262/language/statements/labeled/decl-gen.js16
-rw-r--r--js/src/tests/test262/language/statements/labeled/decl-let.js15
-rw-r--r--js/src/tests/test262/language/statements/labeled/let-array-with-newline.js25
-rw-r--r--js/src/tests/test262/language/statements/labeled/let-block-with-newline.js21
-rw-r--r--js/src/tests/test262/language/statements/labeled/let-identifier-with-newline.js21
-rw-r--r--js/src/tests/test262/language/statements/labeled/shell.js16
-rw-r--r--js/src/tests/test262/language/statements/labeled/static-init-invalid-await.js26
-rw-r--r--js/src/tests/test262/language/statements/labeled/tco-strict.js23
-rw-r--r--js/src/tests/test262/language/statements/labeled/value-await-module-escaped.js22
-rw-r--r--js/src/tests/test262/language/statements/labeled/value-await-module.js21
-rw-r--r--js/src/tests/test262/language/statements/labeled/value-await-non-module-escaped.js17
-rw-r--r--js/src/tests/test262/language/statements/labeled/value-await-non-module.js16
-rw-r--r--js/src/tests/test262/language/statements/labeled/value-yield-non-strict-escaped.js13
-rw-r--r--js/src/tests/test262/language/statements/labeled/value-yield-non-strict.js14
-rw-r--r--js/src/tests/test262/language/statements/labeled/value-yield-strict-escaped-strict.js24
-rw-r--r--js/src/tests/test262/language/statements/labeled/value-yield-strict-strict.js19
26 files changed, 494 insertions, 0 deletions
diff --git a/js/src/tests/test262/language/statements/labeled/S12.12_A1_T1.js b/js/src/tests/test262/language/statements/labeled/S12.12_A1_T1.js
new file mode 100644
index 0000000000..009339fa1b
--- /dev/null
+++ b/js/src/tests/test262/language/statements/labeled/S12.12_A1_T1.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Labelled statements are only used in conjunction with labelled
+ break and continue statements
+es5id: 12.12_A1_T1
+description: Checking if labelled break works. See continue and break sections
+---*/
+
+var object = {p1: 1, p2: 1};
+var result = 0;
+lbl: for(var i in object){
+ result += object[i];
+ break lbl;
+}
+
+if(!(result === 1)){
+ throw new Test262Error("'break label' should break execution of labelled iteration statement");
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/labeled/browser.js b/js/src/tests/test262/language/statements/labeled/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/language/statements/labeled/browser.js
diff --git a/js/src/tests/test262/language/statements/labeled/continue.js b/js/src/tests/test262/language/statements/labeled/continue.js
new file mode 100644
index 0000000000..7eaae138b2
--- /dev/null
+++ b/js/src/tests/test262/language/statements/labeled/continue.js
@@ -0,0 +1,28 @@
+// |reftest| error:SyntaxError
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-labelled-statements-static-semantics-containsundefinedcontinuetarget
+es6id: 13.13.4
+description: Does not modify `iterationSet`
+info: |
+ With arguments iterationSet and labelSet.
+
+ LabelledStatement : LabelIdentifier : LabelledItem
+
+ 1. Let label be the StringValue of LabelIdentifier.
+ 2. Let newLabelSet be a copy of labelSet with label appended.
+ 3. Return ContainsUndefinedContinueTarget of LabelledItem with arguments
+ iterationSet and newLabelSet.
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+do {
+ test262: {
+ continue test262;
+ }
+} while (false)
diff --git a/js/src/tests/test262/language/statements/labeled/cptn-break.js b/js/src/tests/test262/language/statements/labeled/cptn-break.js
new file mode 100644
index 0000000000..5e374af5d7
--- /dev/null
+++ b/js/src/tests/test262/language/statements/labeled/cptn-break.js
@@ -0,0 +1,21 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-labelled-statements-runtime-semantics-labelledevaluation
+es6id: 13.13.14
+description: Completion value when LabelledItem returns a "break" completion
+info: |
+ LabelledStatement : LabelIdentifier : LabelledItem
+
+ 1. Let label be the StringValue of LabelIdentifier.
+ 2. Append label as an element of labelSet.
+ 3. Let stmtResult be LabelledEvaluation of LabelledItem with argument
+ labelSet.
+ 4. If stmtResult.[[Type]] is break and SameValue(stmtResult.[[Target]],
+ label) is true, then
+ a. Let stmtResult be NormalCompletion(stmtResult.[[Value]]).
+---*/
+
+assert.sameValue(eval('test262id: { 5; break test262id; 9; }'), 5);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/labeled/cptn-nrml.js b/js/src/tests/test262/language/statements/labeled/cptn-nrml.js
new file mode 100644
index 0000000000..ad04ba0ba7
--- /dev/null
+++ b/js/src/tests/test262/language/statements/labeled/cptn-nrml.js
@@ -0,0 +1,22 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-labelled-statements-runtime-semantics-labelledevaluation
+es6id: 13.13.14
+description: Completion value when LabelledItem returns normally
+info: |
+ LabelledStatement : LabelIdentifier : LabelledItem
+
+ 1. Let label be the StringValue of LabelIdentifier.
+ 2. Append label as an element of labelSet.
+ 3. Let stmtResult be LabelledEvaluation of LabelledItem with argument
+ labelSet.
+ 4. If stmtResult.[[Type]] is break and SameValue(stmtResult.[[Target]],
+ label) is true, then
+ [...]
+ 5. Return Completion(stmtResult).
+---*/
+
+assert.sameValue(eval('test262id: 2;'), 2);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/labeled/decl-async-function.js b/js/src/tests/test262/language/statements/labeled/decl-async-function.js
new file mode 100644
index 0000000000..63b8e17016
--- /dev/null
+++ b/js/src/tests/test262/language/statements/labeled/decl-async-function.js
@@ -0,0 +1,21 @@
+// |reftest| error:SyntaxError
+// Copyright (C) 2017 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-labelled-statements
+description: >
+ AsyncFunctionDeclaration is not allowed in statement position
+info: |
+ ExpressionStatement[Yield, Await] :
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression[+In, ?Yield, ?Await] ;
+negative:
+ phase: parse
+ type: SyntaxError
+features: [async-functions]
+---*/
+
+$DONOTEVALUATE();
+
+label: async function f() {}
diff --git a/js/src/tests/test262/language/statements/labeled/decl-async-generator.js b/js/src/tests/test262/language/statements/labeled/decl-async-generator.js
new file mode 100644
index 0000000000..c11f582bb4
--- /dev/null
+++ b/js/src/tests/test262/language/statements/labeled/decl-async-generator.js
@@ -0,0 +1,21 @@
+// |reftest| error:SyntaxError
+// Copyright (C) 2017 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-labelled-statements
+description: >
+ AsyncGeneratorDeclaration is not allowed in statement position
+info: |
+ ExpressionStatement[Yield, Await] :
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression[+In, ?Yield, ?Await] ;
+negative:
+ phase: parse
+ type: SyntaxError
+features: [async-iteration]
+---*/
+
+$DONOTEVALUATE();
+
+label: async function* g() {}
diff --git a/js/src/tests/test262/language/statements/labeled/decl-cls.js b/js/src/tests/test262/language/statements/labeled/decl-cls.js
new file mode 100644
index 0000000000..1dd24bd805
--- /dev/null
+++ b/js/src/tests/test262/language/statements/labeled/decl-cls.js
@@ -0,0 +1,15 @@
+// |reftest| error:SyntaxError
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Class declaration not allowed in statement position
+esid: sec-labelled-statements
+es6id: 13.13
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+label: class C {}
diff --git a/js/src/tests/test262/language/statements/labeled/decl-const.js b/js/src/tests/test262/language/statements/labeled/decl-const.js
new file mode 100644
index 0000000000..903bbfe85e
--- /dev/null
+++ b/js/src/tests/test262/language/statements/labeled/decl-const.js
@@ -0,0 +1,15 @@
+// |reftest| error:SyntaxError
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Lexical declaration (const) not allowed in statement position
+esid: sec-labelled-statements
+es6id: 13.13
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+label: const x = null;
diff --git a/js/src/tests/test262/language/statements/labeled/decl-fun-strict-strict.js b/js/src/tests/test262/language/statements/labeled/decl-fun-strict-strict.js
new file mode 100644
index 0000000000..75ad6bc614
--- /dev/null
+++ b/js/src/tests/test262/language/statements/labeled/decl-fun-strict-strict.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+'use strict';
+// Copyright (C) 2011 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-labelled-statements
+es6id: 13.13
+description: >
+ function declarations in statement position in strict mode:
+ label: Statement
+flags: [onlyStrict]
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+label: function g() {}
diff --git a/js/src/tests/test262/language/statements/labeled/decl-gen.js b/js/src/tests/test262/language/statements/labeled/decl-gen.js
new file mode 100644
index 0000000000..7811b09f31
--- /dev/null
+++ b/js/src/tests/test262/language/statements/labeled/decl-gen.js
@@ -0,0 +1,16 @@
+// |reftest| error:SyntaxError
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Generator declaration not allowed in statement position
+esid: sec-labelled-statements
+es6id: 13.13
+negative:
+ phase: parse
+ type: SyntaxError
+features: [generators]
+---*/
+
+$DONOTEVALUATE();
+
+label: function* g() {}
diff --git a/js/src/tests/test262/language/statements/labeled/decl-let.js b/js/src/tests/test262/language/statements/labeled/decl-let.js
new file mode 100644
index 0000000000..758f884dbb
--- /dev/null
+++ b/js/src/tests/test262/language/statements/labeled/decl-let.js
@@ -0,0 +1,15 @@
+// |reftest| error:SyntaxError
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Lexical declaration (let) not allowed in statement position
+esid: sec-labelled-statements
+es6id: 13.13
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+label: let x;
diff --git a/js/src/tests/test262/language/statements/labeled/let-array-with-newline.js b/js/src/tests/test262/language/statements/labeled/let-array-with-newline.js
new file mode 100644
index 0000000000..daa158c099
--- /dev/null
+++ b/js/src/tests/test262/language/statements/labeled/let-array-with-newline.js
@@ -0,0 +1,25 @@
+// |reftest| error:SyntaxError
+// Copyright (C) 2017 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-labelled-statements
+description: >
+ ExpressionStatement has a lookahead restriction for `let [`.
+info: |
+ ExpressionStatement[Yield, Await] :
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression[+In, ?Yield, ?Await] ;
+negative:
+ phase: parse
+ type: SyntaxError
+flags: [noStrict]
+---*/
+
+$DONOTEVALUATE();
+
+// Wrapped in an if-statement to avoid reference errors at runtime.
+if (false) {
+ L: let
+ [a] = 0;
+}
diff --git a/js/src/tests/test262/language/statements/labeled/let-block-with-newline.js b/js/src/tests/test262/language/statements/labeled/let-block-with-newline.js
new file mode 100644
index 0000000000..5ecd38824b
--- /dev/null
+++ b/js/src/tests/test262/language/statements/labeled/let-block-with-newline.js
@@ -0,0 +1,21 @@
+// Copyright (C) 2017 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-labelled-statements
+description: >
+ ExpressionStatement doesn't have a lookahead restriction for `let {`.
+info: |
+ ExpressionStatement[Yield, Await] :
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression[+In, ?Yield, ?Await] ;
+flags: [noStrict]
+---*/
+
+// Wrapped in an if-statement to avoid reference errors at runtime.
+if (false) {
+ L: let // ASI
+ {}
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/labeled/let-identifier-with-newline.js b/js/src/tests/test262/language/statements/labeled/let-identifier-with-newline.js
new file mode 100644
index 0000000000..97911aed22
--- /dev/null
+++ b/js/src/tests/test262/language/statements/labeled/let-identifier-with-newline.js
@@ -0,0 +1,21 @@
+// Copyright (C) 2017 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-labelled-statements
+description: >
+ ExpressionStatement doesn't have a lookahead restriction for `let <binding-identifier>`.
+info: |
+ ExpressionStatement[Yield, Await] :
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression[+In, ?Yield, ?Await] ;
+flags: [noStrict]
+---*/
+
+// Wrapped in an if-statement to avoid reference errors at runtime.
+if (false) {
+ L: let // ASI
+ x = 1;
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/labeled/shell.js b/js/src/tests/test262/language/statements/labeled/shell.js
new file mode 100644
index 0000000000..43295587f4
--- /dev/null
+++ b/js/src/tests/test262/language/statements/labeled/shell.js
@@ -0,0 +1,16 @@
+// GENERATED, DO NOT EDIT
+// file: tcoHelper.js
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: |
+ This defines the number of consecutive recursive function calls that must be
+ made in order to prove that stack frames are properly destroyed according to
+ ES2015 tail call optimization semantics.
+defines: [$MAX_ITERATIONS]
+---*/
+
+
+
+
+var $MAX_ITERATIONS = 100000;
diff --git a/js/src/tests/test262/language/statements/labeled/static-init-invalid-await.js b/js/src/tests/test262/language/statements/labeled/static-init-invalid-await.js
new file mode 100644
index 0000000000..ac8268847a
--- /dev/null
+++ b/js/src/tests/test262/language/statements/labeled/static-init-invalid-await.js
@@ -0,0 +1,26 @@
+// |reftest| error:SyntaxError
+// Copyright (C) 2021 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-class-definitions-static-semantics-early-errors
+description: Restriction on `await`
+info: |
+ LabelIdentifier : Identifier
+
+ - It is a Syntax Error if the code matched by this production is nested,
+ directly or indirectly (but not crossing function or static initialization
+ block boundaries), within a ClassStaticBlock and the StringValue of
+ Identifier is "await".
+negative:
+ phase: parse
+ type: SyntaxError
+features: [class-static-block]
+---*/
+
+$DONOTEVALUATE();
+
+class C {
+ static {
+ await: 0;
+ }
+}
diff --git a/js/src/tests/test262/language/statements/labeled/tco-strict.js b/js/src/tests/test262/language/statements/labeled/tco-strict.js
new file mode 100644
index 0000000000..b0889704a3
--- /dev/null
+++ b/js/src/tests/test262/language/statements/labeled/tco-strict.js
@@ -0,0 +1,23 @@
+// |reftest| skip -- tail-call-optimization is not supported
+'use strict';
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Statement within statement is a candidate for tail-call optimization.
+esid: sec-static-semantics-hascallintailposition
+flags: [onlyStrict]
+features: [tail-call-optimization]
+includes: [tcoHelper.js]
+---*/
+
+var callCount = 0;
+(function f(n) {
+ if (n === 0) {
+ callCount += 1
+ return;
+ }
+ test262: return f(n - 1);
+}($MAX_ITERATIONS));
+assert.sameValue(callCount, 1);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/labeled/value-await-module-escaped.js b/js/src/tests/test262/language/statements/labeled/value-await-module-escaped.js
new file mode 100644
index 0000000000..16c0f9cf1c
--- /dev/null
+++ b/js/src/tests/test262/language/statements/labeled/value-await-module-escaped.js
@@ -0,0 +1,22 @@
+// |reftest| error:SyntaxError module
+// Copyright (C) 2017 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-identifiers-static-semantics-early-errors
+description: >
+ `await` is a reserved identifier in module code and may not be used as a label.
+info: |
+ Identifier : IdentifierName but not ReservedWord
+
+ It is a Syntax Error if the goal symbol of the syntactic grammar is Module and
+ the StringValue of IdentifierName is "await".
+negative:
+ phase: parse
+ type: SyntaxError
+flags: [module]
+---*/
+
+$DONOTEVALUATE();
+
+aw\u0061it: 1;
diff --git a/js/src/tests/test262/language/statements/labeled/value-await-module.js b/js/src/tests/test262/language/statements/labeled/value-await-module.js
new file mode 100644
index 0000000000..7284a29126
--- /dev/null
+++ b/js/src/tests/test262/language/statements/labeled/value-await-module.js
@@ -0,0 +1,21 @@
+// |reftest| error:SyntaxError module
+// Copyright (C) 2017 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-identifiers-static-semantics-early-errors
+description: >
+ `await` is a reserved identifier in module code and may not be used as a label.
+info: |
+ LabelIdentifier : await
+
+ It is a Syntax Error if the goal symbol of the syntactic grammar is Module.
+negative:
+ phase: parse
+ type: SyntaxError
+flags: [module]
+---*/
+
+$DONOTEVALUATE();
+
+await: 1;
diff --git a/js/src/tests/test262/language/statements/labeled/value-await-non-module-escaped.js b/js/src/tests/test262/language/statements/labeled/value-await-non-module-escaped.js
new file mode 100644
index 0000000000..4a8b7441bb
--- /dev/null
+++ b/js/src/tests/test262/language/statements/labeled/value-await-non-module-escaped.js
@@ -0,0 +1,17 @@
+// Copyright (C) 2017 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-identifiers-static-semantics-early-errors
+description: >
+ `await` is not a reserved identifier in non-module code and may be used as a label.
+info: |
+ Identifier : IdentifierName but not ReservedWord
+
+ It is a Syntax Error if the goal symbol of the syntactic grammar is Module and
+ the StringValue of IdentifierName is "await".
+---*/
+
+aw\u0061it: 1;
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/labeled/value-await-non-module.js b/js/src/tests/test262/language/statements/labeled/value-await-non-module.js
new file mode 100644
index 0000000000..4e6237d457
--- /dev/null
+++ b/js/src/tests/test262/language/statements/labeled/value-await-non-module.js
@@ -0,0 +1,16 @@
+// Copyright (C) 2017 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-identifiers-static-semantics-early-errors
+description: >
+ `await` is not a reserved identifier in non-module code and may be used as a label.
+info: |
+ LabelIdentifier : await
+
+ It is a Syntax Error if the goal symbol of the syntactic grammar is Module.
+---*/
+
+await: 1;
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/labeled/value-yield-non-strict-escaped.js b/js/src/tests/test262/language/statements/labeled/value-yield-non-strict-escaped.js
new file mode 100644
index 0000000000..4503bf2daf
--- /dev/null
+++ b/js/src/tests/test262/language/statements/labeled/value-yield-non-strict-escaped.js
@@ -0,0 +1,13 @@
+// Copyright (C) 2017 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-identifiers-static-semantics-early-errors
+description: >
+ `yield` is not a reserved identifier in non-strict mode code and may be used as a label.
+flags: [noStrict]
+---*/
+
+yi\u0065ld: 1;
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/labeled/value-yield-non-strict.js b/js/src/tests/test262/language/statements/labeled/value-yield-non-strict.js
new file mode 100644
index 0000000000..d9dce33d84
--- /dev/null
+++ b/js/src/tests/test262/language/statements/labeled/value-yield-non-strict.js
@@ -0,0 +1,14 @@
+// Copyright (C) 2013 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+ description: >
+ `yield` is not a reserved identifier in non-strict mode code and may be
+ used as a label.
+ es6id: 12.1.1
+ flags: [noStrict]
+---*/
+
+yield: 1;
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/labeled/value-yield-strict-escaped-strict.js b/js/src/tests/test262/language/statements/labeled/value-yield-strict-escaped-strict.js
new file mode 100644
index 0000000000..1b472202cf
--- /dev/null
+++ b/js/src/tests/test262/language/statements/labeled/value-yield-strict-escaped-strict.js
@@ -0,0 +1,24 @@
+// |reftest| error:SyntaxError
+'use strict';
+// Copyright (C) 2017 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-identifiers-static-semantics-early-errors
+description: >
+ `yield` is a reserved identifier in strict mode code and may not be used as a label.
+info: |
+ Identifier : IdentifierName but not ReservedWord
+
+ It is a Syntax Error if this phrase is contained in strict mode code and the
+ StringValue of IdentifierName is: "implements", "interface", "let", "package",
+ "private", "protected", "public", "static", or "yield".
+negative:
+ phase: parse
+ type: SyntaxError
+flags: [onlyStrict]
+---*/
+
+$DONOTEVALUATE();
+
+yi\u0065ld: 1;
diff --git a/js/src/tests/test262/language/statements/labeled/value-yield-strict-strict.js b/js/src/tests/test262/language/statements/labeled/value-yield-strict-strict.js
new file mode 100644
index 0000000000..539a1ff351
--- /dev/null
+++ b/js/src/tests/test262/language/statements/labeled/value-yield-strict-strict.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+'use strict';
+// Copyright (C) 2013 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+ description: >
+ `yield` is a reserved identifier in strict mode code and may not be used
+ as a label.
+ es6id: 12.1.1
+ negative:
+ phase: parse
+ type: SyntaxError
+ flags: [onlyStrict]
+---*/
+
+$DONOTEVALUATE();
+
+yield: 1;