diff --git a/test/annexB/language/statements/for-in/bare-initializer.js b/test/annexB/language/statements/for-in/bare-initializer.js
new file mode 100644
index 0000000000000000000000000000000000000000..2ef778ecb0e893a1f5db01f345e87245ef0a4b42
--- /dev/null
+++ b/test/annexB/language/statements/for-in/bare-initializer.js
@@ -0,0 +1,12 @@
+// 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-initializers-in-forin-statement-heads
+description: >
+    for-in heads prohibit AssignmentExpressions
+negative: SyntaxError
+---*/
+var a;
+throw NotEarlyError;
+for (a = 0 in {});
+
diff --git a/test/annexB/language/statements/for-in/const-initializer.js b/test/annexB/language/statements/for-in/const-initializer.js
new file mode 100644
index 0000000000000000000000000000000000000000..1f79959dc1bcc0b052090d3591d98096253783db
--- /dev/null
+++ b/test/annexB/language/statements/for-in/const-initializer.js
@@ -0,0 +1,11 @@
+// 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-initializers-in-forin-statement-heads
+description: >
+    for-in initializers with const are prohibited
+negative: SyntaxError
+---*/
+throw NotEarlyError;
+for (const a = 0 in {});
+
diff --git a/test/annexB/language/statements/for-in/let-initializer.js b/test/annexB/language/statements/for-in/let-initializer.js
new file mode 100644
index 0000000000000000000000000000000000000000..f7cc4750a8f0e9ad1e80bd2fd3c30ff7ea21dba4
--- /dev/null
+++ b/test/annexB/language/statements/for-in/let-initializer.js
@@ -0,0 +1,11 @@
+// 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-initializers-in-forin-statement-heads
+description: >
+    for-in initializers with let are prohibited
+negative: SyntaxError
+---*/
+throw NotEarlyError;
+for (let a = 0 in {});
+
diff --git a/test/annexB/language/statements/for-in/nonstrict-initializer.js b/test/annexB/language/statements/for-in/nonstrict-initializer.js
new file mode 100644
index 0000000000000000000000000000000000000000..0a279f49dcdc3d0f2f18e384d71769b3b4e76260
--- /dev/null
+++ b/test/annexB/language/statements/for-in/nonstrict-initializer.js
@@ -0,0 +1,39 @@
+// 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-initializers-in-forin-statement-heads
+description: >
+    for-in initializers in nonstrict mode
+flags: [noStrict]
+---*/
+(function() {
+  var effects = 0;
+  for (var a = ++effects in {});
+  assert.sameValue(effects, 1);
+})();
+
+
+(function() {
+  var stored;
+  for (var a = 0 in stored = a, {});
+  assert.sameValue(stored, 0);
+})();
+
+
+(function() {
+  for (var a = 0 in {});
+  assert.sameValue(a, 0);
+})();
+
+
+(function() {
+  var effects = 0;
+  var iterations = 0;
+  var stored;
+  for (var a = (++effects, -1) in stored = a, {a: 0, b: 1, c: 2}) {
+    ++iterations;
+  }
+  assert.sameValue(stored, -1, "Initialized value should be available to RHS");
+  assert.sameValue(effects, 1, "Initializer should only be executed once");
+  assert.sameValue(iterations, 3, "Loop body should be executed the appropriate number of times");
+})();
diff --git a/test/annexB/language/statements/for-in/strict-initializer.js b/test/annexB/language/statements/for-in/strict-initializer.js
new file mode 100644
index 0000000000000000000000000000000000000000..60f00d283577b00224220042a1daf6b325e06fc1
--- /dev/null
+++ b/test/annexB/language/statements/for-in/strict-initializer.js
@@ -0,0 +1,12 @@
+// 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-initializers-in-forin-statement-heads
+description: >
+    for-in initializers in strict mode are prohibited
+negative: SyntaxError
+flags: [onlyStrict]
+---*/
+throw NotEarlyError;
+for (var a = 0 in {});
+
diff --git a/test/annexB/language/statements/for-in/var-arraybindingpattern-initializer.js b/test/annexB/language/statements/for-in/var-arraybindingpattern-initializer.js
new file mode 100644
index 0000000000000000000000000000000000000000..2507c745028434c3af020850ed19b7d9995fdf7a
--- /dev/null
+++ b/test/annexB/language/statements/for-in/var-arraybindingpattern-initializer.js
@@ -0,0 +1,11 @@
+// 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-initializers-in-forin-statement-heads
+description: >
+    for-in initializers with ArrayBindingPatterns are always prohibited
+negative: SyntaxError
+---*/
+throw NotEarlyError;
+for (var [a] = 0 in {});
+
diff --git a/test/annexB/language/statements/for-in/var-objectbindingpattern-initializer.js b/test/annexB/language/statements/for-in/var-objectbindingpattern-initializer.js
new file mode 100644
index 0000000000000000000000000000000000000000..84c14d60b8d21c6970edfa480522e0be26c8236d
--- /dev/null
+++ b/test/annexB/language/statements/for-in/var-objectbindingpattern-initializer.js
@@ -0,0 +1,11 @@
+// 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-initializers-in-forin-statement-heads
+description: >
+    for-in initializers with ObjectBindingPattern are always prohibited
+negative: SyntaxError
+---*/
+throw NotEarlyError;
+for (var {a} = 0 in {});
+