diff --git a/src/async-generators/yield-promise-reject-next-catch.case b/src/async-generators/yield-promise-reject-next-catch.case
new file mode 100644
index 0000000000000000000000000000000000000000..bc056813398cfe54cabdbcc054c6ae0429a4be55
--- /dev/null
+++ b/src/async-generators/yield-promise-reject-next-catch.case
@@ -0,0 +1,27 @@
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+desc: yield Promise.reject(value) is treated as throw value
+template: default
+flags: [async]
+---*/
+
+//- setup
+let error = new Error();
+//- body
+yield Promise.reject(error);
+yield "unreachable";
+//- assertions
+iter.next().then(() => {
+  throw new Test262Error("Promise incorrectly resolved.");
+}).catch(rejectValue => {
+  // yield Promise.reject(error);
+  assert.sameValue(rejectValue, error);
+
+  iter.next().then(({done, value}) => {
+    // iter is closed now.
+    assert.sameValue(done, true, "The value of IteratorResult.done is `true`");
+    assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`");
+  }).then($DONE, $DONE);
+});
diff --git a/src/async-generators/yield-promise-reject-next-for-await-of-async-iterator.case b/src/async-generators/yield-promise-reject-next-for-await-of-async-iterator.case
new file mode 100644
index 0000000000000000000000000000000000000000..bca3550a4496a91c3e3f1486811d9179815011d0
--- /dev/null
+++ b/src/async-generators/yield-promise-reject-next-for-await-of-async-iterator.case
@@ -0,0 +1,33 @@
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+desc: yield * [Promise.reject(value)] is treated as throw value
+template: default
+flags: [async]
+---*/
+
+//- setup
+let error = new Error();
+async function * readFile() {
+  yield Promise.reject(error);
+  yield "unreachable";
+}
+//- body
+for await (let line of readFile()) {
+  yield line;
+}
+//- assertions
+iter.next().then(() => {
+  throw new Test262Error("Promise incorrectly resolved.");
+}, rejectValue => {
+
+  // yield Promise.reject(error);
+  assert.sameValue(rejectValue, error);
+
+  iter.next().then(({done, value}) => {
+    // iter is closed now.
+    assert.sameValue(done, true, "The value of IteratorResult.done is `true`");
+    assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`");
+  }).then($DONE, $DONE);
+}).catch($DONE);
diff --git a/src/async-generators/yield-promise-reject-next-for-await-of-sync-iterator.case b/src/async-generators/yield-promise-reject-next-for-await-of-sync-iterator.case
new file mode 100644
index 0000000000000000000000000000000000000000..19774b0943dc5ef2e5e79e92ff34296acdb114ea
--- /dev/null
+++ b/src/async-generators/yield-promise-reject-next-for-await-of-sync-iterator.case
@@ -0,0 +1,32 @@
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+desc: yield Promise.reject(value) in for-await-of is treated as throw value
+template: default
+flags: [async]
+---*/
+
+//- setup
+let error = new Error();
+let iterable = [
+  Promise.reject(error),
+  "unreachable"
+];
+//- body
+for await (let value of iterable) {
+  yield value;
+}
+//- assertions
+iter.next().then(() => {
+  throw new Test262Error("Promise incorrectly resolved.");
+}, rejectValue => {
+  // yield Promise.reject(error);
+  assert.sameValue(rejectValue, error);
+
+  iter.next().then(({done, value}) => {
+    // iter is closed now.
+    assert.sameValue(done, true, "The value of IteratorResult.done is `true`");
+    assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`");
+  }).then($DONE, $DONE);
+}).catch($DONE);
diff --git a/src/async-generators/yield-promise-reject-next-yield-star-async-iterator.case b/src/async-generators/yield-promise-reject-next-yield-star-async-iterator.case
new file mode 100644
index 0000000000000000000000000000000000000000..5239f6068bd0f530aad5f388632af49901d20b5d
--- /dev/null
+++ b/src/async-generators/yield-promise-reject-next-yield-star-async-iterator.case
@@ -0,0 +1,31 @@
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+desc: yield * (async iterator) is treated as throw value
+template: default
+flags: [async]
+---*/
+
+//- setup
+let error = new Error();
+async function * readFile() {
+  yield Promise.reject(error);
+  yield "unreachable";
+}
+//- body
+yield * readFile();
+
+//- assertions
+iter.next().then(() => {
+  throw new Test262Error("Promise incorrectly resolved.");
+}, rejectValue => {
+  // yield Promise.reject(error);
+  assert.sameValue(rejectValue, error);
+
+  iter.next().then(({done, value}) => {
+    // iter is closed now.
+    assert.sameValue(done, true, "The value of IteratorResult.done is `true`");
+    assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`");
+  }).then($DONE, $DONE);
+}).then($DONE, $DONE);
diff --git a/src/async-generators/yield-promise-reject-next-yield-star-sync-iterator.case b/src/async-generators/yield-promise-reject-next-yield-star-sync-iterator.case
new file mode 100644
index 0000000000000000000000000000000000000000..36fb4da678aa2486b02353fd03687994471dbe54
--- /dev/null
+++ b/src/async-generators/yield-promise-reject-next-yield-star-sync-iterator.case
@@ -0,0 +1,30 @@
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+desc: yield * (async iterator) is treated as throw value
+template: default
+flags: [async]
+---*/
+
+//- setup
+let error = new Error();
+let iterable = [
+  Promise.reject(error),
+  "unreachable"
+];
+//- body
+yield * iterable;
+//- assertions
+iter.next().then(() => {
+  throw new Test262Error("Promise incorrectly resolved.");
+}, rejectValue => {
+  // yield Promise.reject(error);
+  assert.sameValue(rejectValue, error);
+
+  iter.next().then(({done, value}) => {
+    // iter is closed now.
+    assert.sameValue(done, true, "The value of IteratorResult.done is `true`");
+    assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`");
+  }).then($DONE, $DONE);
+}).catch($DONE);
diff --git a/src/async-generators/yield-promise-reject-next.case b/src/async-generators/yield-promise-reject-next.case
new file mode 100644
index 0000000000000000000000000000000000000000..09a1eba75417e25d79792e12c90faf6a0be59829
--- /dev/null
+++ b/src/async-generators/yield-promise-reject-next.case
@@ -0,0 +1,27 @@
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+desc: yield Promise.reject(value) is treated as throw value
+template: default
+flags: [async]
+---*/
+
+//- setup
+let error = new Error();
+//- body
+yield Promise.reject(error);
+yield "unreachable";
+//- assertions
+iter.next().then(() => {
+  throw new Test262Error("Promise incorrectly resolved.");
+}, rejectValue => {
+  // yield Promise.reject(error);
+  assert.sameValue(rejectValue, error);
+
+  iter.next().then(({done, value}) => {
+    // iter is closed now.
+    assert.sameValue(done, true, "The value of IteratorResult.done is `true`");
+    assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`");
+  }).then($DONE, $DONE);
+}).catch($DONE);
diff --git a/test/language/expressions/async-generator/named-yield-promise-reject-next-catch.js b/test/language/expressions/async-generator/named-yield-promise-reject-next-catch.js
new file mode 100644
index 0000000000000000000000000000000000000000..59d8be4235bcbe9450b21bc80222b606868cf52c
--- /dev/null
+++ b/test/language/expressions/async-generator/named-yield-promise-reject-next-catch.js
@@ -0,0 +1,43 @@
+// This file was procedurally generated from the following sources:
+// - src/async-generators/yield-promise-reject-next-catch.case
+// - src/async-generators/default/async-expression-named.template
+/*---
+description: yield Promise.reject(value) is treated as throw value (Named async generator expression)
+esid: prod-AsyncGeneratorExpression
+features: [async-iteration]
+flags: [generated, async]
+info: |
+    Async Generator Function Definitions
+
+    AsyncGeneratorExpression :
+      async [no LineTerminator here] function * BindingIdentifier ( FormalParameters ) {
+        AsyncGeneratorBody }
+
+---*/
+let error = new Error();
+
+
+var callCount = 0;
+
+var gen = async function *g() {
+  callCount += 1;
+  yield Promise.reject(error);
+  yield "unreachable";
+};
+
+var iter = gen();
+
+iter.next().then(() => {
+  throw new Test262Error("Promise incorrectly resolved.");
+}).catch(rejectValue => {
+  // yield Promise.reject(error);
+  assert.sameValue(rejectValue, error);
+
+  iter.next().then(({done, value}) => {
+    // iter is closed now.
+    assert.sameValue(done, true, "The value of IteratorResult.done is `true`");
+    assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`");
+  }).then($DONE, $DONE);
+});
+
+assert.sameValue(callCount, 1);
diff --git a/test/language/expressions/async-generator/named-yield-promise-reject-next-for-await-of-async-iterator.js b/test/language/expressions/async-generator/named-yield-promise-reject-next-for-await-of-async-iterator.js
new file mode 100644
index 0000000000000000000000000000000000000000..29cbdb6b5aa0cd5c850cf5ef4a54ed6da8d7f6f8
--- /dev/null
+++ b/test/language/expressions/async-generator/named-yield-promise-reject-next-for-await-of-async-iterator.js
@@ -0,0 +1,49 @@
+// This file was procedurally generated from the following sources:
+// - src/async-generators/yield-promise-reject-next-for-await-of-async-iterator.case
+// - src/async-generators/default/async-expression-named.template
+/*---
+description: yield * [Promise.reject(value)] is treated as throw value (Named async generator expression)
+esid: prod-AsyncGeneratorExpression
+features: [async-iteration]
+flags: [generated, async]
+info: |
+    Async Generator Function Definitions
+
+    AsyncGeneratorExpression :
+      async [no LineTerminator here] function * BindingIdentifier ( FormalParameters ) {
+        AsyncGeneratorBody }
+
+---*/
+let error = new Error();
+async function * readFile() {
+  yield Promise.reject(error);
+  yield "unreachable";
+}
+
+
+var callCount = 0;
+
+var gen = async function *g() {
+  callCount += 1;
+  for await (let line of readFile()) {
+    yield line;
+  }
+};
+
+var iter = gen();
+
+iter.next().then(() => {
+  throw new Test262Error("Promise incorrectly resolved.");
+}, rejectValue => {
+
+  // yield Promise.reject(error);
+  assert.sameValue(rejectValue, error);
+
+  iter.next().then(({done, value}) => {
+    // iter is closed now.
+    assert.sameValue(done, true, "The value of IteratorResult.done is `true`");
+    assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`");
+  }).then($DONE, $DONE);
+}).catch($DONE);
+
+assert.sameValue(callCount, 1);
diff --git a/test/language/expressions/async-generator/named-yield-promise-reject-next-for-await-of-sync-iterator.js b/test/language/expressions/async-generator/named-yield-promise-reject-next-for-await-of-sync-iterator.js
new file mode 100644
index 0000000000000000000000000000000000000000..21bb881198a150a5fdc4b104d74e1fd63b8188d1
--- /dev/null
+++ b/test/language/expressions/async-generator/named-yield-promise-reject-next-for-await-of-sync-iterator.js
@@ -0,0 +1,48 @@
+// This file was procedurally generated from the following sources:
+// - src/async-generators/yield-promise-reject-next-for-await-of-sync-iterator.case
+// - src/async-generators/default/async-expression-named.template
+/*---
+description: yield Promise.reject(value) in for-await-of is treated as throw value (Named async generator expression)
+esid: prod-AsyncGeneratorExpression
+features: [async-iteration]
+flags: [generated, async]
+info: |
+    Async Generator Function Definitions
+
+    AsyncGeneratorExpression :
+      async [no LineTerminator here] function * BindingIdentifier ( FormalParameters ) {
+        AsyncGeneratorBody }
+
+---*/
+let error = new Error();
+let iterable = [
+  Promise.reject(error),
+  "unreachable"
+];
+
+
+var callCount = 0;
+
+var gen = async function *g() {
+  callCount += 1;
+  for await (let value of iterable) {
+    yield value;
+  }
+};
+
+var iter = gen();
+
+iter.next().then(() => {
+  throw new Test262Error("Promise incorrectly resolved.");
+}, rejectValue => {
+  // yield Promise.reject(error);
+  assert.sameValue(rejectValue, error);
+
+  iter.next().then(({done, value}) => {
+    // iter is closed now.
+    assert.sameValue(done, true, "The value of IteratorResult.done is `true`");
+    assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`");
+  }).then($DONE, $DONE);
+}).catch($DONE);
+
+assert.sameValue(callCount, 1);
diff --git a/test/language/expressions/async-generator/named-yield-promise-reject-next-yield-star-async-iterator.js b/test/language/expressions/async-generator/named-yield-promise-reject-next-yield-star-async-iterator.js
new file mode 100644
index 0000000000000000000000000000000000000000..0794cd9f6c73acc9be56dac00d96d48c9fa145c2
--- /dev/null
+++ b/test/language/expressions/async-generator/named-yield-promise-reject-next-yield-star-async-iterator.js
@@ -0,0 +1,47 @@
+// This file was procedurally generated from the following sources:
+// - src/async-generators/yield-promise-reject-next-yield-star-async-iterator.case
+// - src/async-generators/default/async-expression-named.template
+/*---
+description: yield * (async iterator) is treated as throw value (Named async generator expression)
+esid: prod-AsyncGeneratorExpression
+features: [async-iteration]
+flags: [generated, async]
+info: |
+    Async Generator Function Definitions
+
+    AsyncGeneratorExpression :
+      async [no LineTerminator here] function * BindingIdentifier ( FormalParameters ) {
+        AsyncGeneratorBody }
+
+---*/
+let error = new Error();
+async function * readFile() {
+  yield Promise.reject(error);
+  yield "unreachable";
+}
+
+
+var callCount = 0;
+
+var gen = async function *g() {
+  callCount += 1;
+  yield * readFile();
+
+};
+
+var iter = gen();
+
+iter.next().then(() => {
+  throw new Test262Error("Promise incorrectly resolved.");
+}, rejectValue => {
+  // yield Promise.reject(error);
+  assert.sameValue(rejectValue, error);
+
+  iter.next().then(({done, value}) => {
+    // iter is closed now.
+    assert.sameValue(done, true, "The value of IteratorResult.done is `true`");
+    assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`");
+  }).then($DONE, $DONE);
+}).then($DONE, $DONE);
+
+assert.sameValue(callCount, 1);
diff --git a/test/language/expressions/async-generator/named-yield-promise-reject-next-yield-star-sync-iterator.js b/test/language/expressions/async-generator/named-yield-promise-reject-next-yield-star-sync-iterator.js
new file mode 100644
index 0000000000000000000000000000000000000000..72e72df6281ae6bfd78487ae02f2de6c4d347bba
--- /dev/null
+++ b/test/language/expressions/async-generator/named-yield-promise-reject-next-yield-star-sync-iterator.js
@@ -0,0 +1,46 @@
+// This file was procedurally generated from the following sources:
+// - src/async-generators/yield-promise-reject-next-yield-star-sync-iterator.case
+// - src/async-generators/default/async-expression-named.template
+/*---
+description: yield * (async iterator) is treated as throw value (Named async generator expression)
+esid: prod-AsyncGeneratorExpression
+features: [async-iteration]
+flags: [generated, async]
+info: |
+    Async Generator Function Definitions
+
+    AsyncGeneratorExpression :
+      async [no LineTerminator here] function * BindingIdentifier ( FormalParameters ) {
+        AsyncGeneratorBody }
+
+---*/
+let error = new Error();
+let iterable = [
+  Promise.reject(error),
+  "unreachable"
+];
+
+
+var callCount = 0;
+
+var gen = async function *g() {
+  callCount += 1;
+  yield * iterable;
+};
+
+var iter = gen();
+
+iter.next().then(() => {
+  throw new Test262Error("Promise incorrectly resolved.");
+}, rejectValue => {
+  // yield Promise.reject(error);
+  assert.sameValue(rejectValue, error);
+
+  iter.next().then(({done, value}) => {
+    // iter is closed now.
+    assert.sameValue(done, true, "The value of IteratorResult.done is `true`");
+    assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`");
+  }).then($DONE, $DONE);
+}).catch($DONE);
+
+assert.sameValue(callCount, 1);
diff --git a/test/language/expressions/async-generator/named-yield-promise-reject-next.js b/test/language/expressions/async-generator/named-yield-promise-reject-next.js
new file mode 100644
index 0000000000000000000000000000000000000000..ad22eb20ebe769c3be52983bb708971458b20441
--- /dev/null
+++ b/test/language/expressions/async-generator/named-yield-promise-reject-next.js
@@ -0,0 +1,43 @@
+// This file was procedurally generated from the following sources:
+// - src/async-generators/yield-promise-reject-next.case
+// - src/async-generators/default/async-expression-named.template
+/*---
+description: yield Promise.reject(value) is treated as throw value (Named async generator expression)
+esid: prod-AsyncGeneratorExpression
+features: [async-iteration]
+flags: [generated, async]
+info: |
+    Async Generator Function Definitions
+
+    AsyncGeneratorExpression :
+      async [no LineTerminator here] function * BindingIdentifier ( FormalParameters ) {
+        AsyncGeneratorBody }
+
+---*/
+let error = new Error();
+
+
+var callCount = 0;
+
+var gen = async function *g() {
+  callCount += 1;
+  yield Promise.reject(error);
+  yield "unreachable";
+};
+
+var iter = gen();
+
+iter.next().then(() => {
+  throw new Test262Error("Promise incorrectly resolved.");
+}, rejectValue => {
+  // yield Promise.reject(error);
+  assert.sameValue(rejectValue, error);
+
+  iter.next().then(({done, value}) => {
+    // iter is closed now.
+    assert.sameValue(done, true, "The value of IteratorResult.done is `true`");
+    assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`");
+  }).then($DONE, $DONE);
+}).catch($DONE);
+
+assert.sameValue(callCount, 1);
diff --git a/test/language/expressions/async-generator/yield-promise-reject-next-catch.js b/test/language/expressions/async-generator/yield-promise-reject-next-catch.js
new file mode 100644
index 0000000000000000000000000000000000000000..e1e7551dde1289549289dd172b2b92edaa98d76b
--- /dev/null
+++ b/test/language/expressions/async-generator/yield-promise-reject-next-catch.js
@@ -0,0 +1,43 @@
+// This file was procedurally generated from the following sources:
+// - src/async-generators/yield-promise-reject-next-catch.case
+// - src/async-generators/default/async-expression.template
+/*---
+description: yield Promise.reject(value) is treated as throw value (Unnamed async generator expression)
+esid: prod-AsyncGeneratorExpression
+features: [async-iteration]
+flags: [generated, async]
+info: |
+    Async Generator Function Definitions
+
+    AsyncGeneratorExpression :
+      async [no LineTerminator here] function * BindingIdentifier ( FormalParameters ) {
+        AsyncGeneratorBody }
+
+---*/
+let error = new Error();
+
+
+var callCount = 0;
+
+var gen = async function *() {
+  callCount += 1;
+  yield Promise.reject(error);
+  yield "unreachable";
+};
+
+var iter = gen();
+
+iter.next().then(() => {
+  throw new Test262Error("Promise incorrectly resolved.");
+}).catch(rejectValue => {
+  // yield Promise.reject(error);
+  assert.sameValue(rejectValue, error);
+
+  iter.next().then(({done, value}) => {
+    // iter is closed now.
+    assert.sameValue(done, true, "The value of IteratorResult.done is `true`");
+    assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`");
+  }).then($DONE, $DONE);
+});
+
+assert.sameValue(callCount, 1);
diff --git a/test/language/expressions/async-generator/yield-promise-reject-next-for-await-of-async-iterator.js b/test/language/expressions/async-generator/yield-promise-reject-next-for-await-of-async-iterator.js
new file mode 100644
index 0000000000000000000000000000000000000000..8e265f1f9c566b491b00df3941996366946a6a03
--- /dev/null
+++ b/test/language/expressions/async-generator/yield-promise-reject-next-for-await-of-async-iterator.js
@@ -0,0 +1,49 @@
+// This file was procedurally generated from the following sources:
+// - src/async-generators/yield-promise-reject-next-for-await-of-async-iterator.case
+// - src/async-generators/default/async-expression.template
+/*---
+description: yield * [Promise.reject(value)] is treated as throw value (Unnamed async generator expression)
+esid: prod-AsyncGeneratorExpression
+features: [async-iteration]
+flags: [generated, async]
+info: |
+    Async Generator Function Definitions
+
+    AsyncGeneratorExpression :
+      async [no LineTerminator here] function * BindingIdentifier ( FormalParameters ) {
+        AsyncGeneratorBody }
+
+---*/
+let error = new Error();
+async function * readFile() {
+  yield Promise.reject(error);
+  yield "unreachable";
+}
+
+
+var callCount = 0;
+
+var gen = async function *() {
+  callCount += 1;
+  for await (let line of readFile()) {
+    yield line;
+  }
+};
+
+var iter = gen();
+
+iter.next().then(() => {
+  throw new Test262Error("Promise incorrectly resolved.");
+}, rejectValue => {
+
+  // yield Promise.reject(error);
+  assert.sameValue(rejectValue, error);
+
+  iter.next().then(({done, value}) => {
+    // iter is closed now.
+    assert.sameValue(done, true, "The value of IteratorResult.done is `true`");
+    assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`");
+  }).then($DONE, $DONE);
+}).catch($DONE);
+
+assert.sameValue(callCount, 1);
diff --git a/test/language/expressions/async-generator/yield-promise-reject-next-for-await-of-sync-iterator.js b/test/language/expressions/async-generator/yield-promise-reject-next-for-await-of-sync-iterator.js
new file mode 100644
index 0000000000000000000000000000000000000000..7c98b1a8b4883b30c14fe470053441a163b39878
--- /dev/null
+++ b/test/language/expressions/async-generator/yield-promise-reject-next-for-await-of-sync-iterator.js
@@ -0,0 +1,48 @@
+// This file was procedurally generated from the following sources:
+// - src/async-generators/yield-promise-reject-next-for-await-of-sync-iterator.case
+// - src/async-generators/default/async-expression.template
+/*---
+description: yield Promise.reject(value) in for-await-of is treated as throw value (Unnamed async generator expression)
+esid: prod-AsyncGeneratorExpression
+features: [async-iteration]
+flags: [generated, async]
+info: |
+    Async Generator Function Definitions
+
+    AsyncGeneratorExpression :
+      async [no LineTerminator here] function * BindingIdentifier ( FormalParameters ) {
+        AsyncGeneratorBody }
+
+---*/
+let error = new Error();
+let iterable = [
+  Promise.reject(error),
+  "unreachable"
+];
+
+
+var callCount = 0;
+
+var gen = async function *() {
+  callCount += 1;
+  for await (let value of iterable) {
+    yield value;
+  }
+};
+
+var iter = gen();
+
+iter.next().then(() => {
+  throw new Test262Error("Promise incorrectly resolved.");
+}, rejectValue => {
+  // yield Promise.reject(error);
+  assert.sameValue(rejectValue, error);
+
+  iter.next().then(({done, value}) => {
+    // iter is closed now.
+    assert.sameValue(done, true, "The value of IteratorResult.done is `true`");
+    assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`");
+  }).then($DONE, $DONE);
+}).catch($DONE);
+
+assert.sameValue(callCount, 1);
diff --git a/test/language/expressions/async-generator/yield-promise-reject-next-yield-star-async-iterator.js b/test/language/expressions/async-generator/yield-promise-reject-next-yield-star-async-iterator.js
new file mode 100644
index 0000000000000000000000000000000000000000..ae21e98dff996e6b7bff6f7272dd394279cd4a90
--- /dev/null
+++ b/test/language/expressions/async-generator/yield-promise-reject-next-yield-star-async-iterator.js
@@ -0,0 +1,47 @@
+// This file was procedurally generated from the following sources:
+// - src/async-generators/yield-promise-reject-next-yield-star-async-iterator.case
+// - src/async-generators/default/async-expression.template
+/*---
+description: yield * (async iterator) is treated as throw value (Unnamed async generator expression)
+esid: prod-AsyncGeneratorExpression
+features: [async-iteration]
+flags: [generated, async]
+info: |
+    Async Generator Function Definitions
+
+    AsyncGeneratorExpression :
+      async [no LineTerminator here] function * BindingIdentifier ( FormalParameters ) {
+        AsyncGeneratorBody }
+
+---*/
+let error = new Error();
+async function * readFile() {
+  yield Promise.reject(error);
+  yield "unreachable";
+}
+
+
+var callCount = 0;
+
+var gen = async function *() {
+  callCount += 1;
+  yield * readFile();
+
+};
+
+var iter = gen();
+
+iter.next().then(() => {
+  throw new Test262Error("Promise incorrectly resolved.");
+}, rejectValue => {
+  // yield Promise.reject(error);
+  assert.sameValue(rejectValue, error);
+
+  iter.next().then(({done, value}) => {
+    // iter is closed now.
+    assert.sameValue(done, true, "The value of IteratorResult.done is `true`");
+    assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`");
+  }).then($DONE, $DONE);
+}).then($DONE, $DONE);
+
+assert.sameValue(callCount, 1);
diff --git a/test/language/expressions/async-generator/yield-promise-reject-next-yield-star-sync-iterator.js b/test/language/expressions/async-generator/yield-promise-reject-next-yield-star-sync-iterator.js
new file mode 100644
index 0000000000000000000000000000000000000000..c910527c004716169489ccf192adb0fd90c08d8f
--- /dev/null
+++ b/test/language/expressions/async-generator/yield-promise-reject-next-yield-star-sync-iterator.js
@@ -0,0 +1,46 @@
+// This file was procedurally generated from the following sources:
+// - src/async-generators/yield-promise-reject-next-yield-star-sync-iterator.case
+// - src/async-generators/default/async-expression.template
+/*---
+description: yield * (async iterator) is treated as throw value (Unnamed async generator expression)
+esid: prod-AsyncGeneratorExpression
+features: [async-iteration]
+flags: [generated, async]
+info: |
+    Async Generator Function Definitions
+
+    AsyncGeneratorExpression :
+      async [no LineTerminator here] function * BindingIdentifier ( FormalParameters ) {
+        AsyncGeneratorBody }
+
+---*/
+let error = new Error();
+let iterable = [
+  Promise.reject(error),
+  "unreachable"
+];
+
+
+var callCount = 0;
+
+var gen = async function *() {
+  callCount += 1;
+  yield * iterable;
+};
+
+var iter = gen();
+
+iter.next().then(() => {
+  throw new Test262Error("Promise incorrectly resolved.");
+}, rejectValue => {
+  // yield Promise.reject(error);
+  assert.sameValue(rejectValue, error);
+
+  iter.next().then(({done, value}) => {
+    // iter is closed now.
+    assert.sameValue(done, true, "The value of IteratorResult.done is `true`");
+    assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`");
+  }).then($DONE, $DONE);
+}).catch($DONE);
+
+assert.sameValue(callCount, 1);
diff --git a/test/language/expressions/async-generator/yield-promise-reject-next.js b/test/language/expressions/async-generator/yield-promise-reject-next.js
new file mode 100644
index 0000000000000000000000000000000000000000..a9bdaa6832ff59fe5485cbc10feb24b04b66dabf
--- /dev/null
+++ b/test/language/expressions/async-generator/yield-promise-reject-next.js
@@ -0,0 +1,43 @@
+// This file was procedurally generated from the following sources:
+// - src/async-generators/yield-promise-reject-next.case
+// - src/async-generators/default/async-expression.template
+/*---
+description: yield Promise.reject(value) is treated as throw value (Unnamed async generator expression)
+esid: prod-AsyncGeneratorExpression
+features: [async-iteration]
+flags: [generated, async]
+info: |
+    Async Generator Function Definitions
+
+    AsyncGeneratorExpression :
+      async [no LineTerminator here] function * BindingIdentifier ( FormalParameters ) {
+        AsyncGeneratorBody }
+
+---*/
+let error = new Error();
+
+
+var callCount = 0;
+
+var gen = async function *() {
+  callCount += 1;
+  yield Promise.reject(error);
+  yield "unreachable";
+};
+
+var iter = gen();
+
+iter.next().then(() => {
+  throw new Test262Error("Promise incorrectly resolved.");
+}, rejectValue => {
+  // yield Promise.reject(error);
+  assert.sameValue(rejectValue, error);
+
+  iter.next().then(({done, value}) => {
+    // iter is closed now.
+    assert.sameValue(done, true, "The value of IteratorResult.done is `true`");
+    assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`");
+  }).then($DONE, $DONE);
+}).catch($DONE);
+
+assert.sameValue(callCount, 1);
diff --git a/test/language/expressions/class/async-gen-method-static-yield-promise-reject-next-catch.js b/test/language/expressions/class/async-gen-method-static-yield-promise-reject-next-catch.js
new file mode 100644
index 0000000000000000000000000000000000000000..d34011e074e39db44ed9d5fba9ff487a567dc836
--- /dev/null
+++ b/test/language/expressions/class/async-gen-method-static-yield-promise-reject-next-catch.js
@@ -0,0 +1,50 @@
+// This file was procedurally generated from the following sources:
+// - src/async-generators/yield-promise-reject-next-catch.case
+// - src/async-generators/default/async-class-expr-static-method.template
+/*---
+description: yield Promise.reject(value) is treated as throw value (Static async generator method as a ClassExpression element)
+esid: prod-AsyncGeneratorMethod
+features: [async-iteration]
+flags: [generated, async]
+info: |
+    ClassElement :
+      static MethodDefinition
+
+    MethodDefinition :
+      AsyncGeneratorMethod
+
+    Async Generator Function Definitions
+
+    AsyncGeneratorMethod :
+      async [no LineTerminator here] * PropertyName ( UniqueFormalParameters ) { AsyncGeneratorBody }
+
+---*/
+let error = new Error();
+
+
+var callCount = 0;
+
+var C = class { static async *gen() {
+    callCount += 1;
+    yield Promise.reject(error);
+    yield "unreachable";
+}}
+
+var gen = C.gen;
+
+var iter = gen();
+
+iter.next().then(() => {
+  throw new Test262Error("Promise incorrectly resolved.");
+}).catch(rejectValue => {
+  // yield Promise.reject(error);
+  assert.sameValue(rejectValue, error);
+
+  iter.next().then(({done, value}) => {
+    // iter is closed now.
+    assert.sameValue(done, true, "The value of IteratorResult.done is `true`");
+    assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`");
+  }).then($DONE, $DONE);
+});
+
+assert.sameValue(callCount, 1);
diff --git a/test/language/expressions/class/async-gen-method-static-yield-promise-reject-next-for-await-of-async-iterator.js b/test/language/expressions/class/async-gen-method-static-yield-promise-reject-next-for-await-of-async-iterator.js
new file mode 100644
index 0000000000000000000000000000000000000000..f2b2c68d2daed34367a87b527a4656158d1b4dbf
--- /dev/null
+++ b/test/language/expressions/class/async-gen-method-static-yield-promise-reject-next-for-await-of-async-iterator.js
@@ -0,0 +1,56 @@
+// This file was procedurally generated from the following sources:
+// - src/async-generators/yield-promise-reject-next-for-await-of-async-iterator.case
+// - src/async-generators/default/async-class-expr-static-method.template
+/*---
+description: yield * [Promise.reject(value)] is treated as throw value (Static async generator method as a ClassExpression element)
+esid: prod-AsyncGeneratorMethod
+features: [async-iteration]
+flags: [generated, async]
+info: |
+    ClassElement :
+      static MethodDefinition
+
+    MethodDefinition :
+      AsyncGeneratorMethod
+
+    Async Generator Function Definitions
+
+    AsyncGeneratorMethod :
+      async [no LineTerminator here] * PropertyName ( UniqueFormalParameters ) { AsyncGeneratorBody }
+
+---*/
+let error = new Error();
+async function * readFile() {
+  yield Promise.reject(error);
+  yield "unreachable";
+}
+
+
+var callCount = 0;
+
+var C = class { static async *gen() {
+    callCount += 1;
+    for await (let line of readFile()) {
+      yield line;
+    }
+}}
+
+var gen = C.gen;
+
+var iter = gen();
+
+iter.next().then(() => {
+  throw new Test262Error("Promise incorrectly resolved.");
+}, rejectValue => {
+
+  // yield Promise.reject(error);
+  assert.sameValue(rejectValue, error);
+
+  iter.next().then(({done, value}) => {
+    // iter is closed now.
+    assert.sameValue(done, true, "The value of IteratorResult.done is `true`");
+    assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`");
+  }).then($DONE, $DONE);
+}).catch($DONE);
+
+assert.sameValue(callCount, 1);
diff --git a/test/language/expressions/class/async-gen-method-static-yield-promise-reject-next-for-await-of-sync-iterator.js b/test/language/expressions/class/async-gen-method-static-yield-promise-reject-next-for-await-of-sync-iterator.js
new file mode 100644
index 0000000000000000000000000000000000000000..902a52c7f83d1820d9190a8ba19d08932691b310
--- /dev/null
+++ b/test/language/expressions/class/async-gen-method-static-yield-promise-reject-next-for-await-of-sync-iterator.js
@@ -0,0 +1,55 @@
+// This file was procedurally generated from the following sources:
+// - src/async-generators/yield-promise-reject-next-for-await-of-sync-iterator.case
+// - src/async-generators/default/async-class-expr-static-method.template
+/*---
+description: yield Promise.reject(value) in for-await-of is treated as throw value (Static async generator method as a ClassExpression element)
+esid: prod-AsyncGeneratorMethod
+features: [async-iteration]
+flags: [generated, async]
+info: |
+    ClassElement :
+      static MethodDefinition
+
+    MethodDefinition :
+      AsyncGeneratorMethod
+
+    Async Generator Function Definitions
+
+    AsyncGeneratorMethod :
+      async [no LineTerminator here] * PropertyName ( UniqueFormalParameters ) { AsyncGeneratorBody }
+
+---*/
+let error = new Error();
+let iterable = [
+  Promise.reject(error),
+  "unreachable"
+];
+
+
+var callCount = 0;
+
+var C = class { static async *gen() {
+    callCount += 1;
+    for await (let value of iterable) {
+      yield value;
+    }
+}}
+
+var gen = C.gen;
+
+var iter = gen();
+
+iter.next().then(() => {
+  throw new Test262Error("Promise incorrectly resolved.");
+}, rejectValue => {
+  // yield Promise.reject(error);
+  assert.sameValue(rejectValue, error);
+
+  iter.next().then(({done, value}) => {
+    // iter is closed now.
+    assert.sameValue(done, true, "The value of IteratorResult.done is `true`");
+    assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`");
+  }).then($DONE, $DONE);
+}).catch($DONE);
+
+assert.sameValue(callCount, 1);
diff --git a/test/language/expressions/class/async-gen-method-static-yield-promise-reject-next-yield-star-async-iterator.js b/test/language/expressions/class/async-gen-method-static-yield-promise-reject-next-yield-star-async-iterator.js
new file mode 100644
index 0000000000000000000000000000000000000000..9f17fe1245edc2fa74b7bb7d6cc326624e35d584
--- /dev/null
+++ b/test/language/expressions/class/async-gen-method-static-yield-promise-reject-next-yield-star-async-iterator.js
@@ -0,0 +1,54 @@
+// This file was procedurally generated from the following sources:
+// - src/async-generators/yield-promise-reject-next-yield-star-async-iterator.case
+// - src/async-generators/default/async-class-expr-static-method.template
+/*---
+description: yield * (async iterator) is treated as throw value (Static async generator method as a ClassExpression element)
+esid: prod-AsyncGeneratorMethod
+features: [async-iteration]
+flags: [generated, async]
+info: |
+    ClassElement :
+      static MethodDefinition
+
+    MethodDefinition :
+      AsyncGeneratorMethod
+
+    Async Generator Function Definitions
+
+    AsyncGeneratorMethod :
+      async [no LineTerminator here] * PropertyName ( UniqueFormalParameters ) { AsyncGeneratorBody }
+
+---*/
+let error = new Error();
+async function * readFile() {
+  yield Promise.reject(error);
+  yield "unreachable";
+}
+
+
+var callCount = 0;
+
+var C = class { static async *gen() {
+    callCount += 1;
+    yield * readFile();
+
+}}
+
+var gen = C.gen;
+
+var iter = gen();
+
+iter.next().then(() => {
+  throw new Test262Error("Promise incorrectly resolved.");
+}, rejectValue => {
+  // yield Promise.reject(error);
+  assert.sameValue(rejectValue, error);
+
+  iter.next().then(({done, value}) => {
+    // iter is closed now.
+    assert.sameValue(done, true, "The value of IteratorResult.done is `true`");
+    assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`");
+  }).then($DONE, $DONE);
+}).then($DONE, $DONE);
+
+assert.sameValue(callCount, 1);
diff --git a/test/language/expressions/class/async-gen-method-static-yield-promise-reject-next-yield-star-sync-iterator.js b/test/language/expressions/class/async-gen-method-static-yield-promise-reject-next-yield-star-sync-iterator.js
new file mode 100644
index 0000000000000000000000000000000000000000..42d7ddc978a8ef1f18377c0dfefc01bc4b573480
--- /dev/null
+++ b/test/language/expressions/class/async-gen-method-static-yield-promise-reject-next-yield-star-sync-iterator.js
@@ -0,0 +1,53 @@
+// This file was procedurally generated from the following sources:
+// - src/async-generators/yield-promise-reject-next-yield-star-sync-iterator.case
+// - src/async-generators/default/async-class-expr-static-method.template
+/*---
+description: yield * (async iterator) is treated as throw value (Static async generator method as a ClassExpression element)
+esid: prod-AsyncGeneratorMethod
+features: [async-iteration]
+flags: [generated, async]
+info: |
+    ClassElement :
+      static MethodDefinition
+
+    MethodDefinition :
+      AsyncGeneratorMethod
+
+    Async Generator Function Definitions
+
+    AsyncGeneratorMethod :
+      async [no LineTerminator here] * PropertyName ( UniqueFormalParameters ) { AsyncGeneratorBody }
+
+---*/
+let error = new Error();
+let iterable = [
+  Promise.reject(error),
+  "unreachable"
+];
+
+
+var callCount = 0;
+
+var C = class { static async *gen() {
+    callCount += 1;
+    yield * iterable;
+}}
+
+var gen = C.gen;
+
+var iter = gen();
+
+iter.next().then(() => {
+  throw new Test262Error("Promise incorrectly resolved.");
+}, rejectValue => {
+  // yield Promise.reject(error);
+  assert.sameValue(rejectValue, error);
+
+  iter.next().then(({done, value}) => {
+    // iter is closed now.
+    assert.sameValue(done, true, "The value of IteratorResult.done is `true`");
+    assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`");
+  }).then($DONE, $DONE);
+}).catch($DONE);
+
+assert.sameValue(callCount, 1);
diff --git a/test/language/expressions/class/async-gen-method-static-yield-promise-reject-next.js b/test/language/expressions/class/async-gen-method-static-yield-promise-reject-next.js
new file mode 100644
index 0000000000000000000000000000000000000000..3e5341be4032f44de53e2e04780be8619d14579d
--- /dev/null
+++ b/test/language/expressions/class/async-gen-method-static-yield-promise-reject-next.js
@@ -0,0 +1,50 @@
+// This file was procedurally generated from the following sources:
+// - src/async-generators/yield-promise-reject-next.case
+// - src/async-generators/default/async-class-expr-static-method.template
+/*---
+description: yield Promise.reject(value) is treated as throw value (Static async generator method as a ClassExpression element)
+esid: prod-AsyncGeneratorMethod
+features: [async-iteration]
+flags: [generated, async]
+info: |
+    ClassElement :
+      static MethodDefinition
+
+    MethodDefinition :
+      AsyncGeneratorMethod
+
+    Async Generator Function Definitions
+
+    AsyncGeneratorMethod :
+      async [no LineTerminator here] * PropertyName ( UniqueFormalParameters ) { AsyncGeneratorBody }
+
+---*/
+let error = new Error();
+
+
+var callCount = 0;
+
+var C = class { static async *gen() {
+    callCount += 1;
+    yield Promise.reject(error);
+    yield "unreachable";
+}}
+
+var gen = C.gen;
+
+var iter = gen();
+
+iter.next().then(() => {
+  throw new Test262Error("Promise incorrectly resolved.");
+}, rejectValue => {
+  // yield Promise.reject(error);
+  assert.sameValue(rejectValue, error);
+
+  iter.next().then(({done, value}) => {
+    // iter is closed now.
+    assert.sameValue(done, true, "The value of IteratorResult.done is `true`");
+    assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`");
+  }).then($DONE, $DONE);
+}).catch($DONE);
+
+assert.sameValue(callCount, 1);
diff --git a/test/language/expressions/class/async-gen-method-yield-promise-reject-next-catch.js b/test/language/expressions/class/async-gen-method-yield-promise-reject-next-catch.js
new file mode 100644
index 0000000000000000000000000000000000000000..4be0f63cb7f6aae6d9e6fc1943fc34a28998871b
--- /dev/null
+++ b/test/language/expressions/class/async-gen-method-yield-promise-reject-next-catch.js
@@ -0,0 +1,50 @@
+// This file was procedurally generated from the following sources:
+// - src/async-generators/yield-promise-reject-next-catch.case
+// - src/async-generators/default/async-class-expr-method.template
+/*---
+description: yield Promise.reject(value) is treated as throw value (Async generator method as a ClassExpression element)
+esid: prod-AsyncGeneratorMethod
+features: [async-iteration]
+flags: [generated, async]
+info: |
+    ClassElement :
+      MethodDefinition
+
+    MethodDefinition :
+      AsyncGeneratorMethod
+
+    Async Generator Function Definitions
+
+    AsyncGeneratorMethod :
+      async [no LineTerminator here] * PropertyName ( UniqueFormalParameters ) { AsyncGeneratorBody }
+
+---*/
+let error = new Error();
+
+
+var callCount = 0;
+
+var C = class { async *gen() {
+    callCount += 1;
+    yield Promise.reject(error);
+    yield "unreachable";
+}}
+
+var gen = C.prototype.gen;
+
+var iter = gen();
+
+iter.next().then(() => {
+  throw new Test262Error("Promise incorrectly resolved.");
+}).catch(rejectValue => {
+  // yield Promise.reject(error);
+  assert.sameValue(rejectValue, error);
+
+  iter.next().then(({done, value}) => {
+    // iter is closed now.
+    assert.sameValue(done, true, "The value of IteratorResult.done is `true`");
+    assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`");
+  }).then($DONE, $DONE);
+});
+
+assert.sameValue(callCount, 1);
diff --git a/test/language/expressions/class/async-gen-method-yield-promise-reject-next-for-await-of-async-iterator.js b/test/language/expressions/class/async-gen-method-yield-promise-reject-next-for-await-of-async-iterator.js
new file mode 100644
index 0000000000000000000000000000000000000000..518ec97ca5d2a0f3137105ac6fd0e5b74c632cc5
--- /dev/null
+++ b/test/language/expressions/class/async-gen-method-yield-promise-reject-next-for-await-of-async-iterator.js
@@ -0,0 +1,56 @@
+// This file was procedurally generated from the following sources:
+// - src/async-generators/yield-promise-reject-next-for-await-of-async-iterator.case
+// - src/async-generators/default/async-class-expr-method.template
+/*---
+description: yield * [Promise.reject(value)] is treated as throw value (Async generator method as a ClassExpression element)
+esid: prod-AsyncGeneratorMethod
+features: [async-iteration]
+flags: [generated, async]
+info: |
+    ClassElement :
+      MethodDefinition
+
+    MethodDefinition :
+      AsyncGeneratorMethod
+
+    Async Generator Function Definitions
+
+    AsyncGeneratorMethod :
+      async [no LineTerminator here] * PropertyName ( UniqueFormalParameters ) { AsyncGeneratorBody }
+
+---*/
+let error = new Error();
+async function * readFile() {
+  yield Promise.reject(error);
+  yield "unreachable";
+}
+
+
+var callCount = 0;
+
+var C = class { async *gen() {
+    callCount += 1;
+    for await (let line of readFile()) {
+      yield line;
+    }
+}}
+
+var gen = C.prototype.gen;
+
+var iter = gen();
+
+iter.next().then(() => {
+  throw new Test262Error("Promise incorrectly resolved.");
+}, rejectValue => {
+
+  // yield Promise.reject(error);
+  assert.sameValue(rejectValue, error);
+
+  iter.next().then(({done, value}) => {
+    // iter is closed now.
+    assert.sameValue(done, true, "The value of IteratorResult.done is `true`");
+    assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`");
+  }).then($DONE, $DONE);
+}).catch($DONE);
+
+assert.sameValue(callCount, 1);
diff --git a/test/language/expressions/class/async-gen-method-yield-promise-reject-next-for-await-of-sync-iterator.js b/test/language/expressions/class/async-gen-method-yield-promise-reject-next-for-await-of-sync-iterator.js
new file mode 100644
index 0000000000000000000000000000000000000000..6b58961b08acaa84a4df7bb7fa5f9fdbaccd6b3c
--- /dev/null
+++ b/test/language/expressions/class/async-gen-method-yield-promise-reject-next-for-await-of-sync-iterator.js
@@ -0,0 +1,55 @@
+// This file was procedurally generated from the following sources:
+// - src/async-generators/yield-promise-reject-next-for-await-of-sync-iterator.case
+// - src/async-generators/default/async-class-expr-method.template
+/*---
+description: yield Promise.reject(value) in for-await-of is treated as throw value (Async generator method as a ClassExpression element)
+esid: prod-AsyncGeneratorMethod
+features: [async-iteration]
+flags: [generated, async]
+info: |
+    ClassElement :
+      MethodDefinition
+
+    MethodDefinition :
+      AsyncGeneratorMethod
+
+    Async Generator Function Definitions
+
+    AsyncGeneratorMethod :
+      async [no LineTerminator here] * PropertyName ( UniqueFormalParameters ) { AsyncGeneratorBody }
+
+---*/
+let error = new Error();
+let iterable = [
+  Promise.reject(error),
+  "unreachable"
+];
+
+
+var callCount = 0;
+
+var C = class { async *gen() {
+    callCount += 1;
+    for await (let value of iterable) {
+      yield value;
+    }
+}}
+
+var gen = C.prototype.gen;
+
+var iter = gen();
+
+iter.next().then(() => {
+  throw new Test262Error("Promise incorrectly resolved.");
+}, rejectValue => {
+  // yield Promise.reject(error);
+  assert.sameValue(rejectValue, error);
+
+  iter.next().then(({done, value}) => {
+    // iter is closed now.
+    assert.sameValue(done, true, "The value of IteratorResult.done is `true`");
+    assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`");
+  }).then($DONE, $DONE);
+}).catch($DONE);
+
+assert.sameValue(callCount, 1);
diff --git a/test/language/expressions/class/async-gen-method-yield-promise-reject-next-yield-star-async-iterator.js b/test/language/expressions/class/async-gen-method-yield-promise-reject-next-yield-star-async-iterator.js
new file mode 100644
index 0000000000000000000000000000000000000000..c245cf3579192d8774fa26995bfe191c858a5b33
--- /dev/null
+++ b/test/language/expressions/class/async-gen-method-yield-promise-reject-next-yield-star-async-iterator.js
@@ -0,0 +1,54 @@
+// This file was procedurally generated from the following sources:
+// - src/async-generators/yield-promise-reject-next-yield-star-async-iterator.case
+// - src/async-generators/default/async-class-expr-method.template
+/*---
+description: yield * (async iterator) is treated as throw value (Async generator method as a ClassExpression element)
+esid: prod-AsyncGeneratorMethod
+features: [async-iteration]
+flags: [generated, async]
+info: |
+    ClassElement :
+      MethodDefinition
+
+    MethodDefinition :
+      AsyncGeneratorMethod
+
+    Async Generator Function Definitions
+
+    AsyncGeneratorMethod :
+      async [no LineTerminator here] * PropertyName ( UniqueFormalParameters ) { AsyncGeneratorBody }
+
+---*/
+let error = new Error();
+async function * readFile() {
+  yield Promise.reject(error);
+  yield "unreachable";
+}
+
+
+var callCount = 0;
+
+var C = class { async *gen() {
+    callCount += 1;
+    yield * readFile();
+
+}}
+
+var gen = C.prototype.gen;
+
+var iter = gen();
+
+iter.next().then(() => {
+  throw new Test262Error("Promise incorrectly resolved.");
+}, rejectValue => {
+  // yield Promise.reject(error);
+  assert.sameValue(rejectValue, error);
+
+  iter.next().then(({done, value}) => {
+    // iter is closed now.
+    assert.sameValue(done, true, "The value of IteratorResult.done is `true`");
+    assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`");
+  }).then($DONE, $DONE);
+}).then($DONE, $DONE);
+
+assert.sameValue(callCount, 1);
diff --git a/test/language/expressions/class/async-gen-method-yield-promise-reject-next-yield-star-sync-iterator.js b/test/language/expressions/class/async-gen-method-yield-promise-reject-next-yield-star-sync-iterator.js
new file mode 100644
index 0000000000000000000000000000000000000000..e17f0c12f0078df0283c2d0cf87d4e9db95a5f78
--- /dev/null
+++ b/test/language/expressions/class/async-gen-method-yield-promise-reject-next-yield-star-sync-iterator.js
@@ -0,0 +1,53 @@
+// This file was procedurally generated from the following sources:
+// - src/async-generators/yield-promise-reject-next-yield-star-sync-iterator.case
+// - src/async-generators/default/async-class-expr-method.template
+/*---
+description: yield * (async iterator) is treated as throw value (Async generator method as a ClassExpression element)
+esid: prod-AsyncGeneratorMethod
+features: [async-iteration]
+flags: [generated, async]
+info: |
+    ClassElement :
+      MethodDefinition
+
+    MethodDefinition :
+      AsyncGeneratorMethod
+
+    Async Generator Function Definitions
+
+    AsyncGeneratorMethod :
+      async [no LineTerminator here] * PropertyName ( UniqueFormalParameters ) { AsyncGeneratorBody }
+
+---*/
+let error = new Error();
+let iterable = [
+  Promise.reject(error),
+  "unreachable"
+];
+
+
+var callCount = 0;
+
+var C = class { async *gen() {
+    callCount += 1;
+    yield * iterable;
+}}
+
+var gen = C.prototype.gen;
+
+var iter = gen();
+
+iter.next().then(() => {
+  throw new Test262Error("Promise incorrectly resolved.");
+}, rejectValue => {
+  // yield Promise.reject(error);
+  assert.sameValue(rejectValue, error);
+
+  iter.next().then(({done, value}) => {
+    // iter is closed now.
+    assert.sameValue(done, true, "The value of IteratorResult.done is `true`");
+    assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`");
+  }).then($DONE, $DONE);
+}).catch($DONE);
+
+assert.sameValue(callCount, 1);
diff --git a/test/language/expressions/class/async-gen-method-yield-promise-reject-next.js b/test/language/expressions/class/async-gen-method-yield-promise-reject-next.js
new file mode 100644
index 0000000000000000000000000000000000000000..423a7842f6af4d69a10d72fc41a1c67625c95550
--- /dev/null
+++ b/test/language/expressions/class/async-gen-method-yield-promise-reject-next.js
@@ -0,0 +1,50 @@
+// This file was procedurally generated from the following sources:
+// - src/async-generators/yield-promise-reject-next.case
+// - src/async-generators/default/async-class-expr-method.template
+/*---
+description: yield Promise.reject(value) is treated as throw value (Async generator method as a ClassExpression element)
+esid: prod-AsyncGeneratorMethod
+features: [async-iteration]
+flags: [generated, async]
+info: |
+    ClassElement :
+      MethodDefinition
+
+    MethodDefinition :
+      AsyncGeneratorMethod
+
+    Async Generator Function Definitions
+
+    AsyncGeneratorMethod :
+      async [no LineTerminator here] * PropertyName ( UniqueFormalParameters ) { AsyncGeneratorBody }
+
+---*/
+let error = new Error();
+
+
+var callCount = 0;
+
+var C = class { async *gen() {
+    callCount += 1;
+    yield Promise.reject(error);
+    yield "unreachable";
+}}
+
+var gen = C.prototype.gen;
+
+var iter = gen();
+
+iter.next().then(() => {
+  throw new Test262Error("Promise incorrectly resolved.");
+}, rejectValue => {
+  // yield Promise.reject(error);
+  assert.sameValue(rejectValue, error);
+
+  iter.next().then(({done, value}) => {
+    // iter is closed now.
+    assert.sameValue(done, true, "The value of IteratorResult.done is `true`");
+    assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`");
+  }).then($DONE, $DONE);
+}).catch($DONE);
+
+assert.sameValue(callCount, 1);
diff --git a/test/language/expressions/object/method-definition/async-gen-yield-promise-reject-next-catch.js b/test/language/expressions/object/method-definition/async-gen-yield-promise-reject-next-catch.js
new file mode 100644
index 0000000000000000000000000000000000000000..3721180ebd41328c8035b257cd5780e8cef7eb23
--- /dev/null
+++ b/test/language/expressions/object/method-definition/async-gen-yield-promise-reject-next-catch.js
@@ -0,0 +1,43 @@
+// This file was procedurally generated from the following sources:
+// - src/async-generators/yield-promise-reject-next-catch.case
+// - src/async-generators/default/async-obj-method.template
+/*---
+description: yield Promise.reject(value) is treated as throw value (Async generator method)
+esid: prod-AsyncGeneratorMethod
+features: [async-iteration]
+flags: [generated, async]
+info: |
+    Async Generator Function Definitions
+
+    AsyncGeneratorMethod :
+      async [no LineTerminator here] * PropertyName ( UniqueFormalParameters ) { AsyncGeneratorBody }
+
+---*/
+let error = new Error();
+
+var callCount = 0;
+
+var gen = {
+  async *method() {
+    callCount += 1;
+    yield Promise.reject(error);
+    yield "unreachable";
+  }
+}.method;
+
+var iter = gen();
+
+iter.next().then(() => {
+  throw new Test262Error("Promise incorrectly resolved.");
+}).catch(rejectValue => {
+  // yield Promise.reject(error);
+  assert.sameValue(rejectValue, error);
+
+  iter.next().then(({done, value}) => {
+    // iter is closed now.
+    assert.sameValue(done, true, "The value of IteratorResult.done is `true`");
+    assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`");
+  }).then($DONE, $DONE);
+});
+
+assert.sameValue(callCount, 1);
diff --git a/test/language/expressions/object/method-definition/async-gen-yield-promise-reject-next-for-await-of-async-iterator.js b/test/language/expressions/object/method-definition/async-gen-yield-promise-reject-next-for-await-of-async-iterator.js
new file mode 100644
index 0000000000000000000000000000000000000000..14906893e740642b1e73656e323b40969b25068b
--- /dev/null
+++ b/test/language/expressions/object/method-definition/async-gen-yield-promise-reject-next-for-await-of-async-iterator.js
@@ -0,0 +1,49 @@
+// This file was procedurally generated from the following sources:
+// - src/async-generators/yield-promise-reject-next-for-await-of-async-iterator.case
+// - src/async-generators/default/async-obj-method.template
+/*---
+description: yield * [Promise.reject(value)] is treated as throw value (Async generator method)
+esid: prod-AsyncGeneratorMethod
+features: [async-iteration]
+flags: [generated, async]
+info: |
+    Async Generator Function Definitions
+
+    AsyncGeneratorMethod :
+      async [no LineTerminator here] * PropertyName ( UniqueFormalParameters ) { AsyncGeneratorBody }
+
+---*/
+let error = new Error();
+async function * readFile() {
+  yield Promise.reject(error);
+  yield "unreachable";
+}
+
+var callCount = 0;
+
+var gen = {
+  async *method() {
+    callCount += 1;
+    for await (let line of readFile()) {
+      yield line;
+    }
+  }
+}.method;
+
+var iter = gen();
+
+iter.next().then(() => {
+  throw new Test262Error("Promise incorrectly resolved.");
+}, rejectValue => {
+
+  // yield Promise.reject(error);
+  assert.sameValue(rejectValue, error);
+
+  iter.next().then(({done, value}) => {
+    // iter is closed now.
+    assert.sameValue(done, true, "The value of IteratorResult.done is `true`");
+    assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`");
+  }).then($DONE, $DONE);
+}).catch($DONE);
+
+assert.sameValue(callCount, 1);
diff --git a/test/language/expressions/object/method-definition/async-gen-yield-promise-reject-next-for-await-of-sync-iterator.js b/test/language/expressions/object/method-definition/async-gen-yield-promise-reject-next-for-await-of-sync-iterator.js
new file mode 100644
index 0000000000000000000000000000000000000000..693da2fec7d58fdab767c8047db7b8eec3958819
--- /dev/null
+++ b/test/language/expressions/object/method-definition/async-gen-yield-promise-reject-next-for-await-of-sync-iterator.js
@@ -0,0 +1,48 @@
+// This file was procedurally generated from the following sources:
+// - src/async-generators/yield-promise-reject-next-for-await-of-sync-iterator.case
+// - src/async-generators/default/async-obj-method.template
+/*---
+description: yield Promise.reject(value) in for-await-of is treated as throw value (Async generator method)
+esid: prod-AsyncGeneratorMethod
+features: [async-iteration]
+flags: [generated, async]
+info: |
+    Async Generator Function Definitions
+
+    AsyncGeneratorMethod :
+      async [no LineTerminator here] * PropertyName ( UniqueFormalParameters ) { AsyncGeneratorBody }
+
+---*/
+let error = new Error();
+let iterable = [
+  Promise.reject(error),
+  "unreachable"
+];
+
+var callCount = 0;
+
+var gen = {
+  async *method() {
+    callCount += 1;
+    for await (let value of iterable) {
+      yield value;
+    }
+  }
+}.method;
+
+var iter = gen();
+
+iter.next().then(() => {
+  throw new Test262Error("Promise incorrectly resolved.");
+}, rejectValue => {
+  // yield Promise.reject(error);
+  assert.sameValue(rejectValue, error);
+
+  iter.next().then(({done, value}) => {
+    // iter is closed now.
+    assert.sameValue(done, true, "The value of IteratorResult.done is `true`");
+    assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`");
+  }).then($DONE, $DONE);
+}).catch($DONE);
+
+assert.sameValue(callCount, 1);
diff --git a/test/language/expressions/object/method-definition/async-gen-yield-promise-reject-next-yield-star-async-iterator.js b/test/language/expressions/object/method-definition/async-gen-yield-promise-reject-next-yield-star-async-iterator.js
new file mode 100644
index 0000000000000000000000000000000000000000..26167b5f7f9e12bef95f064421ddcd14ad893f4e
--- /dev/null
+++ b/test/language/expressions/object/method-definition/async-gen-yield-promise-reject-next-yield-star-async-iterator.js
@@ -0,0 +1,47 @@
+// This file was procedurally generated from the following sources:
+// - src/async-generators/yield-promise-reject-next-yield-star-async-iterator.case
+// - src/async-generators/default/async-obj-method.template
+/*---
+description: yield * (async iterator) is treated as throw value (Async generator method)
+esid: prod-AsyncGeneratorMethod
+features: [async-iteration]
+flags: [generated, async]
+info: |
+    Async Generator Function Definitions
+
+    AsyncGeneratorMethod :
+      async [no LineTerminator here] * PropertyName ( UniqueFormalParameters ) { AsyncGeneratorBody }
+
+---*/
+let error = new Error();
+async function * readFile() {
+  yield Promise.reject(error);
+  yield "unreachable";
+}
+
+var callCount = 0;
+
+var gen = {
+  async *method() {
+    callCount += 1;
+    yield * readFile();
+
+  }
+}.method;
+
+var iter = gen();
+
+iter.next().then(() => {
+  throw new Test262Error("Promise incorrectly resolved.");
+}, rejectValue => {
+  // yield Promise.reject(error);
+  assert.sameValue(rejectValue, error);
+
+  iter.next().then(({done, value}) => {
+    // iter is closed now.
+    assert.sameValue(done, true, "The value of IteratorResult.done is `true`");
+    assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`");
+  }).then($DONE, $DONE);
+}).then($DONE, $DONE);
+
+assert.sameValue(callCount, 1);
diff --git a/test/language/expressions/object/method-definition/async-gen-yield-promise-reject-next-yield-star-sync-iterator.js b/test/language/expressions/object/method-definition/async-gen-yield-promise-reject-next-yield-star-sync-iterator.js
new file mode 100644
index 0000000000000000000000000000000000000000..7ddf2bf64f5087f82ab5d42bc08c4b755893c310
--- /dev/null
+++ b/test/language/expressions/object/method-definition/async-gen-yield-promise-reject-next-yield-star-sync-iterator.js
@@ -0,0 +1,46 @@
+// This file was procedurally generated from the following sources:
+// - src/async-generators/yield-promise-reject-next-yield-star-sync-iterator.case
+// - src/async-generators/default/async-obj-method.template
+/*---
+description: yield * (async iterator) is treated as throw value (Async generator method)
+esid: prod-AsyncGeneratorMethod
+features: [async-iteration]
+flags: [generated, async]
+info: |
+    Async Generator Function Definitions
+
+    AsyncGeneratorMethod :
+      async [no LineTerminator here] * PropertyName ( UniqueFormalParameters ) { AsyncGeneratorBody }
+
+---*/
+let error = new Error();
+let iterable = [
+  Promise.reject(error),
+  "unreachable"
+];
+
+var callCount = 0;
+
+var gen = {
+  async *method() {
+    callCount += 1;
+    yield * iterable;
+  }
+}.method;
+
+var iter = gen();
+
+iter.next().then(() => {
+  throw new Test262Error("Promise incorrectly resolved.");
+}, rejectValue => {
+  // yield Promise.reject(error);
+  assert.sameValue(rejectValue, error);
+
+  iter.next().then(({done, value}) => {
+    // iter is closed now.
+    assert.sameValue(done, true, "The value of IteratorResult.done is `true`");
+    assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`");
+  }).then($DONE, $DONE);
+}).catch($DONE);
+
+assert.sameValue(callCount, 1);
diff --git a/test/language/expressions/object/method-definition/async-gen-yield-promise-reject-next.js b/test/language/expressions/object/method-definition/async-gen-yield-promise-reject-next.js
new file mode 100644
index 0000000000000000000000000000000000000000..a4bcb40c8d3a1e8211dbde674aa4a8cb36cdda5f
--- /dev/null
+++ b/test/language/expressions/object/method-definition/async-gen-yield-promise-reject-next.js
@@ -0,0 +1,43 @@
+// This file was procedurally generated from the following sources:
+// - src/async-generators/yield-promise-reject-next.case
+// - src/async-generators/default/async-obj-method.template
+/*---
+description: yield Promise.reject(value) is treated as throw value (Async generator method)
+esid: prod-AsyncGeneratorMethod
+features: [async-iteration]
+flags: [generated, async]
+info: |
+    Async Generator Function Definitions
+
+    AsyncGeneratorMethod :
+      async [no LineTerminator here] * PropertyName ( UniqueFormalParameters ) { AsyncGeneratorBody }
+
+---*/
+let error = new Error();
+
+var callCount = 0;
+
+var gen = {
+  async *method() {
+    callCount += 1;
+    yield Promise.reject(error);
+    yield "unreachable";
+  }
+}.method;
+
+var iter = gen();
+
+iter.next().then(() => {
+  throw new Test262Error("Promise incorrectly resolved.");
+}, rejectValue => {
+  // yield Promise.reject(error);
+  assert.sameValue(rejectValue, error);
+
+  iter.next().then(({done, value}) => {
+    // iter is closed now.
+    assert.sameValue(done, true, "The value of IteratorResult.done is `true`");
+    assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`");
+  }).then($DONE, $DONE);
+}).catch($DONE);
+
+assert.sameValue(callCount, 1);
diff --git a/test/language/statements/async-generator/yield-promise-reject-next-catch.js b/test/language/statements/async-generator/yield-promise-reject-next-catch.js
new file mode 100644
index 0000000000000000000000000000000000000000..b9215dbfd78bc86123c296661ac0ce70bccd63cd
--- /dev/null
+++ b/test/language/statements/async-generator/yield-promise-reject-next-catch.js
@@ -0,0 +1,43 @@
+// This file was procedurally generated from the following sources:
+// - src/async-generators/yield-promise-reject-next-catch.case
+// - src/async-generators/default/async-declaration.template
+/*---
+description: yield Promise.reject(value) is treated as throw value (Async generator Function declaration)
+esid: prod-AsyncGeneratorDeclaration
+features: [async-iteration]
+flags: [generated, async]
+info: |
+    Async Generator Function Definitions
+
+    AsyncGeneratorDeclaration:
+      async [no LineTerminator here] function * BindingIdentifier ( FormalParameters ) {
+        AsyncGeneratorBody }
+
+---*/
+let error = new Error();
+
+
+var callCount = 0;
+
+async function *gen() {
+  callCount += 1;
+  yield Promise.reject(error);
+  yield "unreachable";
+}
+
+var iter = gen();
+
+iter.next().then(() => {
+  throw new Test262Error("Promise incorrectly resolved.");
+}).catch(rejectValue => {
+  // yield Promise.reject(error);
+  assert.sameValue(rejectValue, error);
+
+  iter.next().then(({done, value}) => {
+    // iter is closed now.
+    assert.sameValue(done, true, "The value of IteratorResult.done is `true`");
+    assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`");
+  }).then($DONE, $DONE);
+});
+
+assert.sameValue(callCount, 1);
diff --git a/test/language/statements/async-generator/yield-promise-reject-next-for-await-of-async-iterator.js b/test/language/statements/async-generator/yield-promise-reject-next-for-await-of-async-iterator.js
new file mode 100644
index 0000000000000000000000000000000000000000..f753b346f8150bb23cb97fe410fff55430327484
--- /dev/null
+++ b/test/language/statements/async-generator/yield-promise-reject-next-for-await-of-async-iterator.js
@@ -0,0 +1,49 @@
+// This file was procedurally generated from the following sources:
+// - src/async-generators/yield-promise-reject-next-for-await-of-async-iterator.case
+// - src/async-generators/default/async-declaration.template
+/*---
+description: yield * [Promise.reject(value)] is treated as throw value (Async generator Function declaration)
+esid: prod-AsyncGeneratorDeclaration
+features: [async-iteration]
+flags: [generated, async]
+info: |
+    Async Generator Function Definitions
+
+    AsyncGeneratorDeclaration:
+      async [no LineTerminator here] function * BindingIdentifier ( FormalParameters ) {
+        AsyncGeneratorBody }
+
+---*/
+let error = new Error();
+async function * readFile() {
+  yield Promise.reject(error);
+  yield "unreachable";
+}
+
+
+var callCount = 0;
+
+async function *gen() {
+  callCount += 1;
+  for await (let line of readFile()) {
+    yield line;
+  }
+}
+
+var iter = gen();
+
+iter.next().then(() => {
+  throw new Test262Error("Promise incorrectly resolved.");
+}, rejectValue => {
+
+  // yield Promise.reject(error);
+  assert.sameValue(rejectValue, error);
+
+  iter.next().then(({done, value}) => {
+    // iter is closed now.
+    assert.sameValue(done, true, "The value of IteratorResult.done is `true`");
+    assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`");
+  }).then($DONE, $DONE);
+}).catch($DONE);
+
+assert.sameValue(callCount, 1);
diff --git a/test/language/statements/async-generator/yield-promise-reject-next-for-await-of-sync-iterator.js b/test/language/statements/async-generator/yield-promise-reject-next-for-await-of-sync-iterator.js
new file mode 100644
index 0000000000000000000000000000000000000000..1b7c4473aae7b496da13bb5274b89404fb8dc6cf
--- /dev/null
+++ b/test/language/statements/async-generator/yield-promise-reject-next-for-await-of-sync-iterator.js
@@ -0,0 +1,48 @@
+// This file was procedurally generated from the following sources:
+// - src/async-generators/yield-promise-reject-next-for-await-of-sync-iterator.case
+// - src/async-generators/default/async-declaration.template
+/*---
+description: yield Promise.reject(value) in for-await-of is treated as throw value (Async generator Function declaration)
+esid: prod-AsyncGeneratorDeclaration
+features: [async-iteration]
+flags: [generated, async]
+info: |
+    Async Generator Function Definitions
+
+    AsyncGeneratorDeclaration:
+      async [no LineTerminator here] function * BindingIdentifier ( FormalParameters ) {
+        AsyncGeneratorBody }
+
+---*/
+let error = new Error();
+let iterable = [
+  Promise.reject(error),
+  "unreachable"
+];
+
+
+var callCount = 0;
+
+async function *gen() {
+  callCount += 1;
+  for await (let value of iterable) {
+    yield value;
+  }
+}
+
+var iter = gen();
+
+iter.next().then(() => {
+  throw new Test262Error("Promise incorrectly resolved.");
+}, rejectValue => {
+  // yield Promise.reject(error);
+  assert.sameValue(rejectValue, error);
+
+  iter.next().then(({done, value}) => {
+    // iter is closed now.
+    assert.sameValue(done, true, "The value of IteratorResult.done is `true`");
+    assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`");
+  }).then($DONE, $DONE);
+}).catch($DONE);
+
+assert.sameValue(callCount, 1);
diff --git a/test/language/statements/async-generator/yield-promise-reject-next-yield-star-async-iterator.js b/test/language/statements/async-generator/yield-promise-reject-next-yield-star-async-iterator.js
new file mode 100644
index 0000000000000000000000000000000000000000..5c455994af3de2f6a2b1b2e24578ee780560db97
--- /dev/null
+++ b/test/language/statements/async-generator/yield-promise-reject-next-yield-star-async-iterator.js
@@ -0,0 +1,47 @@
+// This file was procedurally generated from the following sources:
+// - src/async-generators/yield-promise-reject-next-yield-star-async-iterator.case
+// - src/async-generators/default/async-declaration.template
+/*---
+description: yield * (async iterator) is treated as throw value (Async generator Function declaration)
+esid: prod-AsyncGeneratorDeclaration
+features: [async-iteration]
+flags: [generated, async]
+info: |
+    Async Generator Function Definitions
+
+    AsyncGeneratorDeclaration:
+      async [no LineTerminator here] function * BindingIdentifier ( FormalParameters ) {
+        AsyncGeneratorBody }
+
+---*/
+let error = new Error();
+async function * readFile() {
+  yield Promise.reject(error);
+  yield "unreachable";
+}
+
+
+var callCount = 0;
+
+async function *gen() {
+  callCount += 1;
+  yield * readFile();
+
+}
+
+var iter = gen();
+
+iter.next().then(() => {
+  throw new Test262Error("Promise incorrectly resolved.");
+}, rejectValue => {
+  // yield Promise.reject(error);
+  assert.sameValue(rejectValue, error);
+
+  iter.next().then(({done, value}) => {
+    // iter is closed now.
+    assert.sameValue(done, true, "The value of IteratorResult.done is `true`");
+    assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`");
+  }).then($DONE, $DONE);
+}).then($DONE, $DONE);
+
+assert.sameValue(callCount, 1);
diff --git a/test/language/statements/async-generator/yield-promise-reject-next-yield-star-sync-iterator.js b/test/language/statements/async-generator/yield-promise-reject-next-yield-star-sync-iterator.js
new file mode 100644
index 0000000000000000000000000000000000000000..6c01a8749cfb659dff0a724a353c5923d0346796
--- /dev/null
+++ b/test/language/statements/async-generator/yield-promise-reject-next-yield-star-sync-iterator.js
@@ -0,0 +1,46 @@
+// This file was procedurally generated from the following sources:
+// - src/async-generators/yield-promise-reject-next-yield-star-sync-iterator.case
+// - src/async-generators/default/async-declaration.template
+/*---
+description: yield * (async iterator) is treated as throw value (Async generator Function declaration)
+esid: prod-AsyncGeneratorDeclaration
+features: [async-iteration]
+flags: [generated, async]
+info: |
+    Async Generator Function Definitions
+
+    AsyncGeneratorDeclaration:
+      async [no LineTerminator here] function * BindingIdentifier ( FormalParameters ) {
+        AsyncGeneratorBody }
+
+---*/
+let error = new Error();
+let iterable = [
+  Promise.reject(error),
+  "unreachable"
+];
+
+
+var callCount = 0;
+
+async function *gen() {
+  callCount += 1;
+  yield * iterable;
+}
+
+var iter = gen();
+
+iter.next().then(() => {
+  throw new Test262Error("Promise incorrectly resolved.");
+}, rejectValue => {
+  // yield Promise.reject(error);
+  assert.sameValue(rejectValue, error);
+
+  iter.next().then(({done, value}) => {
+    // iter is closed now.
+    assert.sameValue(done, true, "The value of IteratorResult.done is `true`");
+    assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`");
+  }).then($DONE, $DONE);
+}).catch($DONE);
+
+assert.sameValue(callCount, 1);
diff --git a/test/language/statements/async-generator/yield-promise-reject-next.js b/test/language/statements/async-generator/yield-promise-reject-next.js
new file mode 100644
index 0000000000000000000000000000000000000000..9e8ef58dafb2afa02b8386dff9280a2a54cee48a
--- /dev/null
+++ b/test/language/statements/async-generator/yield-promise-reject-next.js
@@ -0,0 +1,43 @@
+// This file was procedurally generated from the following sources:
+// - src/async-generators/yield-promise-reject-next.case
+// - src/async-generators/default/async-declaration.template
+/*---
+description: yield Promise.reject(value) is treated as throw value (Async generator Function declaration)
+esid: prod-AsyncGeneratorDeclaration
+features: [async-iteration]
+flags: [generated, async]
+info: |
+    Async Generator Function Definitions
+
+    AsyncGeneratorDeclaration:
+      async [no LineTerminator here] function * BindingIdentifier ( FormalParameters ) {
+        AsyncGeneratorBody }
+
+---*/
+let error = new Error();
+
+
+var callCount = 0;
+
+async function *gen() {
+  callCount += 1;
+  yield Promise.reject(error);
+  yield "unreachable";
+}
+
+var iter = gen();
+
+iter.next().then(() => {
+  throw new Test262Error("Promise incorrectly resolved.");
+}, rejectValue => {
+  // yield Promise.reject(error);
+  assert.sameValue(rejectValue, error);
+
+  iter.next().then(({done, value}) => {
+    // iter is closed now.
+    assert.sameValue(done, true, "The value of IteratorResult.done is `true`");
+    assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`");
+  }).then($DONE, $DONE);
+}).catch($DONE);
+
+assert.sameValue(callCount, 1);
diff --git a/test/language/statements/class/async-gen-method-static-yield-promise-reject-next-catch.js b/test/language/statements/class/async-gen-method-static-yield-promise-reject-next-catch.js
new file mode 100644
index 0000000000000000000000000000000000000000..63e9b2c427572e38f903217d3ca33e11304486a7
--- /dev/null
+++ b/test/language/statements/class/async-gen-method-static-yield-promise-reject-next-catch.js
@@ -0,0 +1,50 @@
+// This file was procedurally generated from the following sources:
+// - src/async-generators/yield-promise-reject-next-catch.case
+// - src/async-generators/default/async-class-decl-static-method.template
+/*---
+description: yield Promise.reject(value) is treated as throw value (Static async generator method as a ClassDeclaration element)
+esid: prod-AsyncGeneratorMethod
+features: [async-iteration]
+flags: [generated, async]
+info: |
+    ClassElement :
+      static MethodDefinition
+
+    MethodDefinition :
+      AsyncGeneratorMethod
+
+    Async Generator Function Definitions
+
+    AsyncGeneratorMethod :
+      async [no LineTerminator here] * PropertyName ( UniqueFormalParameters ) { AsyncGeneratorBody }
+
+---*/
+let error = new Error();
+
+
+var callCount = 0;
+
+class C { static async *gen() {
+    callCount += 1;
+    yield Promise.reject(error);
+    yield "unreachable";
+}}
+
+var gen = C.gen;
+
+var iter = gen();
+
+iter.next().then(() => {
+  throw new Test262Error("Promise incorrectly resolved.");
+}).catch(rejectValue => {
+  // yield Promise.reject(error);
+  assert.sameValue(rejectValue, error);
+
+  iter.next().then(({done, value}) => {
+    // iter is closed now.
+    assert.sameValue(done, true, "The value of IteratorResult.done is `true`");
+    assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`");
+  }).then($DONE, $DONE);
+});
+
+assert.sameValue(callCount, 1);
diff --git a/test/language/statements/class/async-gen-method-static-yield-promise-reject-next-for-await-of-async-iterator.js b/test/language/statements/class/async-gen-method-static-yield-promise-reject-next-for-await-of-async-iterator.js
new file mode 100644
index 0000000000000000000000000000000000000000..8c345c2044799fe8bbe3236f4ed654c95c2725c9
--- /dev/null
+++ b/test/language/statements/class/async-gen-method-static-yield-promise-reject-next-for-await-of-async-iterator.js
@@ -0,0 +1,56 @@
+// This file was procedurally generated from the following sources:
+// - src/async-generators/yield-promise-reject-next-for-await-of-async-iterator.case
+// - src/async-generators/default/async-class-decl-static-method.template
+/*---
+description: yield * [Promise.reject(value)] is treated as throw value (Static async generator method as a ClassDeclaration element)
+esid: prod-AsyncGeneratorMethod
+features: [async-iteration]
+flags: [generated, async]
+info: |
+    ClassElement :
+      static MethodDefinition
+
+    MethodDefinition :
+      AsyncGeneratorMethod
+
+    Async Generator Function Definitions
+
+    AsyncGeneratorMethod :
+      async [no LineTerminator here] * PropertyName ( UniqueFormalParameters ) { AsyncGeneratorBody }
+
+---*/
+let error = new Error();
+async function * readFile() {
+  yield Promise.reject(error);
+  yield "unreachable";
+}
+
+
+var callCount = 0;
+
+class C { static async *gen() {
+    callCount += 1;
+    for await (let line of readFile()) {
+      yield line;
+    }
+}}
+
+var gen = C.gen;
+
+var iter = gen();
+
+iter.next().then(() => {
+  throw new Test262Error("Promise incorrectly resolved.");
+}, rejectValue => {
+
+  // yield Promise.reject(error);
+  assert.sameValue(rejectValue, error);
+
+  iter.next().then(({done, value}) => {
+    // iter is closed now.
+    assert.sameValue(done, true, "The value of IteratorResult.done is `true`");
+    assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`");
+  }).then($DONE, $DONE);
+}).catch($DONE);
+
+assert.sameValue(callCount, 1);
diff --git a/test/language/statements/class/async-gen-method-static-yield-promise-reject-next-for-await-of-sync-iterator.js b/test/language/statements/class/async-gen-method-static-yield-promise-reject-next-for-await-of-sync-iterator.js
new file mode 100644
index 0000000000000000000000000000000000000000..d9b58325ef309f7a3c01cbb67b7d4198caa624ec
--- /dev/null
+++ b/test/language/statements/class/async-gen-method-static-yield-promise-reject-next-for-await-of-sync-iterator.js
@@ -0,0 +1,55 @@
+// This file was procedurally generated from the following sources:
+// - src/async-generators/yield-promise-reject-next-for-await-of-sync-iterator.case
+// - src/async-generators/default/async-class-decl-static-method.template
+/*---
+description: yield Promise.reject(value) in for-await-of is treated as throw value (Static async generator method as a ClassDeclaration element)
+esid: prod-AsyncGeneratorMethod
+features: [async-iteration]
+flags: [generated, async]
+info: |
+    ClassElement :
+      static MethodDefinition
+
+    MethodDefinition :
+      AsyncGeneratorMethod
+
+    Async Generator Function Definitions
+
+    AsyncGeneratorMethod :
+      async [no LineTerminator here] * PropertyName ( UniqueFormalParameters ) { AsyncGeneratorBody }
+
+---*/
+let error = new Error();
+let iterable = [
+  Promise.reject(error),
+  "unreachable"
+];
+
+
+var callCount = 0;
+
+class C { static async *gen() {
+    callCount += 1;
+    for await (let value of iterable) {
+      yield value;
+    }
+}}
+
+var gen = C.gen;
+
+var iter = gen();
+
+iter.next().then(() => {
+  throw new Test262Error("Promise incorrectly resolved.");
+}, rejectValue => {
+  // yield Promise.reject(error);
+  assert.sameValue(rejectValue, error);
+
+  iter.next().then(({done, value}) => {
+    // iter is closed now.
+    assert.sameValue(done, true, "The value of IteratorResult.done is `true`");
+    assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`");
+  }).then($DONE, $DONE);
+}).catch($DONE);
+
+assert.sameValue(callCount, 1);
diff --git a/test/language/statements/class/async-gen-method-static-yield-promise-reject-next-yield-star-async-iterator.js b/test/language/statements/class/async-gen-method-static-yield-promise-reject-next-yield-star-async-iterator.js
new file mode 100644
index 0000000000000000000000000000000000000000..ba0401d2092abc83b4b757b88c2eb04461c305f6
--- /dev/null
+++ b/test/language/statements/class/async-gen-method-static-yield-promise-reject-next-yield-star-async-iterator.js
@@ -0,0 +1,54 @@
+// This file was procedurally generated from the following sources:
+// - src/async-generators/yield-promise-reject-next-yield-star-async-iterator.case
+// - src/async-generators/default/async-class-decl-static-method.template
+/*---
+description: yield * (async iterator) is treated as throw value (Static async generator method as a ClassDeclaration element)
+esid: prod-AsyncGeneratorMethod
+features: [async-iteration]
+flags: [generated, async]
+info: |
+    ClassElement :
+      static MethodDefinition
+
+    MethodDefinition :
+      AsyncGeneratorMethod
+
+    Async Generator Function Definitions
+
+    AsyncGeneratorMethod :
+      async [no LineTerminator here] * PropertyName ( UniqueFormalParameters ) { AsyncGeneratorBody }
+
+---*/
+let error = new Error();
+async function * readFile() {
+  yield Promise.reject(error);
+  yield "unreachable";
+}
+
+
+var callCount = 0;
+
+class C { static async *gen() {
+    callCount += 1;
+    yield * readFile();
+
+}}
+
+var gen = C.gen;
+
+var iter = gen();
+
+iter.next().then(() => {
+  throw new Test262Error("Promise incorrectly resolved.");
+}, rejectValue => {
+  // yield Promise.reject(error);
+  assert.sameValue(rejectValue, error);
+
+  iter.next().then(({done, value}) => {
+    // iter is closed now.
+    assert.sameValue(done, true, "The value of IteratorResult.done is `true`");
+    assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`");
+  }).then($DONE, $DONE);
+}).then($DONE, $DONE);
+
+assert.sameValue(callCount, 1);
diff --git a/test/language/statements/class/async-gen-method-static-yield-promise-reject-next-yield-star-sync-iterator.js b/test/language/statements/class/async-gen-method-static-yield-promise-reject-next-yield-star-sync-iterator.js
new file mode 100644
index 0000000000000000000000000000000000000000..545756025b9fd51d4da164763fbe6abedf417945
--- /dev/null
+++ b/test/language/statements/class/async-gen-method-static-yield-promise-reject-next-yield-star-sync-iterator.js
@@ -0,0 +1,53 @@
+// This file was procedurally generated from the following sources:
+// - src/async-generators/yield-promise-reject-next-yield-star-sync-iterator.case
+// - src/async-generators/default/async-class-decl-static-method.template
+/*---
+description: yield * (async iterator) is treated as throw value (Static async generator method as a ClassDeclaration element)
+esid: prod-AsyncGeneratorMethod
+features: [async-iteration]
+flags: [generated, async]
+info: |
+    ClassElement :
+      static MethodDefinition
+
+    MethodDefinition :
+      AsyncGeneratorMethod
+
+    Async Generator Function Definitions
+
+    AsyncGeneratorMethod :
+      async [no LineTerminator here] * PropertyName ( UniqueFormalParameters ) { AsyncGeneratorBody }
+
+---*/
+let error = new Error();
+let iterable = [
+  Promise.reject(error),
+  "unreachable"
+];
+
+
+var callCount = 0;
+
+class C { static async *gen() {
+    callCount += 1;
+    yield * iterable;
+}}
+
+var gen = C.gen;
+
+var iter = gen();
+
+iter.next().then(() => {
+  throw new Test262Error("Promise incorrectly resolved.");
+}, rejectValue => {
+  // yield Promise.reject(error);
+  assert.sameValue(rejectValue, error);
+
+  iter.next().then(({done, value}) => {
+    // iter is closed now.
+    assert.sameValue(done, true, "The value of IteratorResult.done is `true`");
+    assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`");
+  }).then($DONE, $DONE);
+}).catch($DONE);
+
+assert.sameValue(callCount, 1);
diff --git a/test/language/statements/class/async-gen-method-static-yield-promise-reject-next.js b/test/language/statements/class/async-gen-method-static-yield-promise-reject-next.js
new file mode 100644
index 0000000000000000000000000000000000000000..b10840fc376694108a2453b47512f96c3f793f85
--- /dev/null
+++ b/test/language/statements/class/async-gen-method-static-yield-promise-reject-next.js
@@ -0,0 +1,50 @@
+// This file was procedurally generated from the following sources:
+// - src/async-generators/yield-promise-reject-next.case
+// - src/async-generators/default/async-class-decl-static-method.template
+/*---
+description: yield Promise.reject(value) is treated as throw value (Static async generator method as a ClassDeclaration element)
+esid: prod-AsyncGeneratorMethod
+features: [async-iteration]
+flags: [generated, async]
+info: |
+    ClassElement :
+      static MethodDefinition
+
+    MethodDefinition :
+      AsyncGeneratorMethod
+
+    Async Generator Function Definitions
+
+    AsyncGeneratorMethod :
+      async [no LineTerminator here] * PropertyName ( UniqueFormalParameters ) { AsyncGeneratorBody }
+
+---*/
+let error = new Error();
+
+
+var callCount = 0;
+
+class C { static async *gen() {
+    callCount += 1;
+    yield Promise.reject(error);
+    yield "unreachable";
+}}
+
+var gen = C.gen;
+
+var iter = gen();
+
+iter.next().then(() => {
+  throw new Test262Error("Promise incorrectly resolved.");
+}, rejectValue => {
+  // yield Promise.reject(error);
+  assert.sameValue(rejectValue, error);
+
+  iter.next().then(({done, value}) => {
+    // iter is closed now.
+    assert.sameValue(done, true, "The value of IteratorResult.done is `true`");
+    assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`");
+  }).then($DONE, $DONE);
+}).catch($DONE);
+
+assert.sameValue(callCount, 1);
diff --git a/test/language/statements/class/async-gen-method-yield-promise-reject-next-catch.js b/test/language/statements/class/async-gen-method-yield-promise-reject-next-catch.js
new file mode 100644
index 0000000000000000000000000000000000000000..4bbb1afabfc08bce9e02c724e0d9fc73a962b303
--- /dev/null
+++ b/test/language/statements/class/async-gen-method-yield-promise-reject-next-catch.js
@@ -0,0 +1,50 @@
+// This file was procedurally generated from the following sources:
+// - src/async-generators/yield-promise-reject-next-catch.case
+// - src/async-generators/default/async-class-decl-method.template
+/*---
+description: yield Promise.reject(value) is treated as throw value (Async Generator method as a ClassDeclaration element)
+esid: prod-AsyncGeneratorMethod
+features: [async-iteration]
+flags: [generated, async]
+info: |
+    ClassElement :
+      MethodDefinition
+
+    MethodDefinition :
+      AsyncGeneratorMethod
+
+    Async Generator Function Definitions
+
+    AsyncGeneratorMethod :
+      async [no LineTerminator here] * PropertyName ( UniqueFormalParameters ) { AsyncGeneratorBody }
+
+---*/
+let error = new Error();
+
+
+var callCount = 0;
+
+class C { async *gen() {
+    callCount += 1;
+    yield Promise.reject(error);
+    yield "unreachable";
+}}
+
+var gen = C.prototype.gen;
+
+var iter = gen();
+
+iter.next().then(() => {
+  throw new Test262Error("Promise incorrectly resolved.");
+}).catch(rejectValue => {
+  // yield Promise.reject(error);
+  assert.sameValue(rejectValue, error);
+
+  iter.next().then(({done, value}) => {
+    // iter is closed now.
+    assert.sameValue(done, true, "The value of IteratorResult.done is `true`");
+    assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`");
+  }).then($DONE, $DONE);
+});
+
+assert.sameValue(callCount, 1);
diff --git a/test/language/statements/class/async-gen-method-yield-promise-reject-next-for-await-of-async-iterator.js b/test/language/statements/class/async-gen-method-yield-promise-reject-next-for-await-of-async-iterator.js
new file mode 100644
index 0000000000000000000000000000000000000000..c1373fd9c38272678873ed4d8efaf72570a36538
--- /dev/null
+++ b/test/language/statements/class/async-gen-method-yield-promise-reject-next-for-await-of-async-iterator.js
@@ -0,0 +1,56 @@
+// This file was procedurally generated from the following sources:
+// - src/async-generators/yield-promise-reject-next-for-await-of-async-iterator.case
+// - src/async-generators/default/async-class-decl-method.template
+/*---
+description: yield * [Promise.reject(value)] is treated as throw value (Async Generator method as a ClassDeclaration element)
+esid: prod-AsyncGeneratorMethod
+features: [async-iteration]
+flags: [generated, async]
+info: |
+    ClassElement :
+      MethodDefinition
+
+    MethodDefinition :
+      AsyncGeneratorMethod
+
+    Async Generator Function Definitions
+
+    AsyncGeneratorMethod :
+      async [no LineTerminator here] * PropertyName ( UniqueFormalParameters ) { AsyncGeneratorBody }
+
+---*/
+let error = new Error();
+async function * readFile() {
+  yield Promise.reject(error);
+  yield "unreachable";
+}
+
+
+var callCount = 0;
+
+class C { async *gen() {
+    callCount += 1;
+    for await (let line of readFile()) {
+      yield line;
+    }
+}}
+
+var gen = C.prototype.gen;
+
+var iter = gen();
+
+iter.next().then(() => {
+  throw new Test262Error("Promise incorrectly resolved.");
+}, rejectValue => {
+
+  // yield Promise.reject(error);
+  assert.sameValue(rejectValue, error);
+
+  iter.next().then(({done, value}) => {
+    // iter is closed now.
+    assert.sameValue(done, true, "The value of IteratorResult.done is `true`");
+    assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`");
+  }).then($DONE, $DONE);
+}).catch($DONE);
+
+assert.sameValue(callCount, 1);
diff --git a/test/language/statements/class/async-gen-method-yield-promise-reject-next-for-await-of-sync-iterator.js b/test/language/statements/class/async-gen-method-yield-promise-reject-next-for-await-of-sync-iterator.js
new file mode 100644
index 0000000000000000000000000000000000000000..bf30ba112a3ad4c188c6c10b00d76486293f511e
--- /dev/null
+++ b/test/language/statements/class/async-gen-method-yield-promise-reject-next-for-await-of-sync-iterator.js
@@ -0,0 +1,55 @@
+// This file was procedurally generated from the following sources:
+// - src/async-generators/yield-promise-reject-next-for-await-of-sync-iterator.case
+// - src/async-generators/default/async-class-decl-method.template
+/*---
+description: yield Promise.reject(value) in for-await-of is treated as throw value (Async Generator method as a ClassDeclaration element)
+esid: prod-AsyncGeneratorMethod
+features: [async-iteration]
+flags: [generated, async]
+info: |
+    ClassElement :
+      MethodDefinition
+
+    MethodDefinition :
+      AsyncGeneratorMethod
+
+    Async Generator Function Definitions
+
+    AsyncGeneratorMethod :
+      async [no LineTerminator here] * PropertyName ( UniqueFormalParameters ) { AsyncGeneratorBody }
+
+---*/
+let error = new Error();
+let iterable = [
+  Promise.reject(error),
+  "unreachable"
+];
+
+
+var callCount = 0;
+
+class C { async *gen() {
+    callCount += 1;
+    for await (let value of iterable) {
+      yield value;
+    }
+}}
+
+var gen = C.prototype.gen;
+
+var iter = gen();
+
+iter.next().then(() => {
+  throw new Test262Error("Promise incorrectly resolved.");
+}, rejectValue => {
+  // yield Promise.reject(error);
+  assert.sameValue(rejectValue, error);
+
+  iter.next().then(({done, value}) => {
+    // iter is closed now.
+    assert.sameValue(done, true, "The value of IteratorResult.done is `true`");
+    assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`");
+  }).then($DONE, $DONE);
+}).catch($DONE);
+
+assert.sameValue(callCount, 1);
diff --git a/test/language/statements/class/async-gen-method-yield-promise-reject-next-yield-star-async-iterator.js b/test/language/statements/class/async-gen-method-yield-promise-reject-next-yield-star-async-iterator.js
new file mode 100644
index 0000000000000000000000000000000000000000..b4d12f15e8e03c74e811285acd4af7d01a5bc52d
--- /dev/null
+++ b/test/language/statements/class/async-gen-method-yield-promise-reject-next-yield-star-async-iterator.js
@@ -0,0 +1,54 @@
+// This file was procedurally generated from the following sources:
+// - src/async-generators/yield-promise-reject-next-yield-star-async-iterator.case
+// - src/async-generators/default/async-class-decl-method.template
+/*---
+description: yield * (async iterator) is treated as throw value (Async Generator method as a ClassDeclaration element)
+esid: prod-AsyncGeneratorMethod
+features: [async-iteration]
+flags: [generated, async]
+info: |
+    ClassElement :
+      MethodDefinition
+
+    MethodDefinition :
+      AsyncGeneratorMethod
+
+    Async Generator Function Definitions
+
+    AsyncGeneratorMethod :
+      async [no LineTerminator here] * PropertyName ( UniqueFormalParameters ) { AsyncGeneratorBody }
+
+---*/
+let error = new Error();
+async function * readFile() {
+  yield Promise.reject(error);
+  yield "unreachable";
+}
+
+
+var callCount = 0;
+
+class C { async *gen() {
+    callCount += 1;
+    yield * readFile();
+
+}}
+
+var gen = C.prototype.gen;
+
+var iter = gen();
+
+iter.next().then(() => {
+  throw new Test262Error("Promise incorrectly resolved.");
+}, rejectValue => {
+  // yield Promise.reject(error);
+  assert.sameValue(rejectValue, error);
+
+  iter.next().then(({done, value}) => {
+    // iter is closed now.
+    assert.sameValue(done, true, "The value of IteratorResult.done is `true`");
+    assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`");
+  }).then($DONE, $DONE);
+}).then($DONE, $DONE);
+
+assert.sameValue(callCount, 1);
diff --git a/test/language/statements/class/async-gen-method-yield-promise-reject-next-yield-star-sync-iterator.js b/test/language/statements/class/async-gen-method-yield-promise-reject-next-yield-star-sync-iterator.js
new file mode 100644
index 0000000000000000000000000000000000000000..2fe6c78986ab52bcbfdb1e6a3477fc6172e72e02
--- /dev/null
+++ b/test/language/statements/class/async-gen-method-yield-promise-reject-next-yield-star-sync-iterator.js
@@ -0,0 +1,53 @@
+// This file was procedurally generated from the following sources:
+// - src/async-generators/yield-promise-reject-next-yield-star-sync-iterator.case
+// - src/async-generators/default/async-class-decl-method.template
+/*---
+description: yield * (async iterator) is treated as throw value (Async Generator method as a ClassDeclaration element)
+esid: prod-AsyncGeneratorMethod
+features: [async-iteration]
+flags: [generated, async]
+info: |
+    ClassElement :
+      MethodDefinition
+
+    MethodDefinition :
+      AsyncGeneratorMethod
+
+    Async Generator Function Definitions
+
+    AsyncGeneratorMethod :
+      async [no LineTerminator here] * PropertyName ( UniqueFormalParameters ) { AsyncGeneratorBody }
+
+---*/
+let error = new Error();
+let iterable = [
+  Promise.reject(error),
+  "unreachable"
+];
+
+
+var callCount = 0;
+
+class C { async *gen() {
+    callCount += 1;
+    yield * iterable;
+}}
+
+var gen = C.prototype.gen;
+
+var iter = gen();
+
+iter.next().then(() => {
+  throw new Test262Error("Promise incorrectly resolved.");
+}, rejectValue => {
+  // yield Promise.reject(error);
+  assert.sameValue(rejectValue, error);
+
+  iter.next().then(({done, value}) => {
+    // iter is closed now.
+    assert.sameValue(done, true, "The value of IteratorResult.done is `true`");
+    assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`");
+  }).then($DONE, $DONE);
+}).catch($DONE);
+
+assert.sameValue(callCount, 1);
diff --git a/test/language/statements/class/async-gen-method-yield-promise-reject-next.js b/test/language/statements/class/async-gen-method-yield-promise-reject-next.js
new file mode 100644
index 0000000000000000000000000000000000000000..d49d52b73636303d43d08b6c373fe5b1fad18fbd
--- /dev/null
+++ b/test/language/statements/class/async-gen-method-yield-promise-reject-next.js
@@ -0,0 +1,50 @@
+// This file was procedurally generated from the following sources:
+// - src/async-generators/yield-promise-reject-next.case
+// - src/async-generators/default/async-class-decl-method.template
+/*---
+description: yield Promise.reject(value) is treated as throw value (Async Generator method as a ClassDeclaration element)
+esid: prod-AsyncGeneratorMethod
+features: [async-iteration]
+flags: [generated, async]
+info: |
+    ClassElement :
+      MethodDefinition
+
+    MethodDefinition :
+      AsyncGeneratorMethod
+
+    Async Generator Function Definitions
+
+    AsyncGeneratorMethod :
+      async [no LineTerminator here] * PropertyName ( UniqueFormalParameters ) { AsyncGeneratorBody }
+
+---*/
+let error = new Error();
+
+
+var callCount = 0;
+
+class C { async *gen() {
+    callCount += 1;
+    yield Promise.reject(error);
+    yield "unreachable";
+}}
+
+var gen = C.prototype.gen;
+
+var iter = gen();
+
+iter.next().then(() => {
+  throw new Test262Error("Promise incorrectly resolved.");
+}, rejectValue => {
+  // yield Promise.reject(error);
+  assert.sameValue(rejectValue, error);
+
+  iter.next().then(({done, value}) => {
+    // iter is closed now.
+    assert.sameValue(done, true, "The value of IteratorResult.done is `true`");
+    assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`");
+  }).then($DONE, $DONE);
+}).catch($DONE);
+
+assert.sameValue(callCount, 1);