// Copyright (C) 2016 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-functiondeclarationinstantiation
es6id: 9.2.12
description: >
  Arguments object is created even when the body contains a lexically-scoped
  binding named "arguments"
info: |
  [...]
  19. Else if "arguments" is an element of parameterNames, then
      a. Let argumentsObjectNeeded be false.
  20. Else if hasParameterExpressions is false, then
      a. If "arguments" is an element of functionNames or if "arguments" is an
         element of lexicalNames, then
         i. Let argumentsObjectNeeded be false.
  [...]
flags: [noStrict]
features: [generators]
---*/

var args;

function* g(x = args = arguments) {
  function arguments() {}
}

g().next();

assert.sameValue(typeof args, 'object');
assert.sameValue(args.length, 0);
