text: load("1d8ada728956c1a3d52d68d1d4d6dd52.js");
  // Copyright 2017 the V8 project authors. All rights reserved.
  // Use of this source code is governed by a BSD-style license that can be
  // found in the LICENSE file.
  
  // Flags: --allow-natives-syntax
  
  function Baseline() {
    let array = new Uint8Array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]);
  
    let it = array[Symbol.iterator]();
    assertEquals(0, it.next().value);
    assertEquals(1, it.next().value);
    assertEquals(2, it.next().value);
    %ArrayBufferNeuter(array.buffer);
    it.next();
  };
  %NeverOptimizeFunction(Baseline);
  
  assertThrows(Baseline, TypeError,
      "Cannot perform Array Iterator.prototype.next on a detached ArrayBuffer");
  
  function Turbo(count = 10000) {
    let array = Array(10000);
    for (let i = 0; i < 10000; ++i) {
      array[i] = 254;
    }
    array[5000] = 255;
    array = new Uint8Array(array);
  
    let sum = 0;
    let it = array[Symbol.iterator]();
    for (let i = 0; i < count; ++i) {
      let result = it.next();
      if (result.value === 255) {
        %ArrayBufferNeuter(array.buffer);
      }
      sum += result.value;
    }
    return sum;
  }
  
  Turbo(10);
  Turbo(10);
  %OptimizeFunctionOnNextCall(Turbo);
  
  assertThrows(Turbo, TypeError,
      "Cannot perform Array Iterator.prototype.next on a detached ArrayBuffer");
  