// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

// Test that optimized JSArray removeLast() calls generate the same error as
// dyncamically dispatched calls.

import 'package:expect/expect.dart';

@NoInline() @AssumeDynamic()
confuse(x) => x;


Error getError(action()) {
  try {
    action();
    Expect.fail('must throw');
  } catch (e) {
    return e;
  }
}

main() {
  fault1() {
    return confuse([]).removeLast();
  }

  fault2() {
    var a = [];
    while (confuse(false)) a.add(1);
    // This one should be optimized since [a] is a growable JSArray.
    return a.removeLast();
  }

  var e1 = getError(fault1);
  var e2 = getError(fault2);

  Expect.equals('$e1', '$e2');
}
