// Copyright 2014 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Flags: --allow-natives-syntax

function mod1() {
  var v_1 = 1;
  var v_2 = 1;
  v_1++;
  v_2 = {valueOf: function() { throw "gagh"; }};

  function bug1() {
    for (var i = 0; i < 1; v_2++) {
      if (v_1 == 1) ;
    }
  }

  return bug1;
}

var f = mod1();
assertThrows(f);
%OptimizeFunctionOnNextCall(f);
assertThrows(f);


var v_3 = 1;
var v_4 = 1;
v_3++;
v_4 = {valueOf: function() { throw "gagh"; }};

function bug2() {
  for (var i = 0; i < 1; v_4++) {
    if (v_3 == 1) ;
  }
}

assertThrows(bug2);
%OptimizeFunctionOnNextCall(bug2);
assertThrows(bug2);
