// Copyright (c) 2018 Rick Waldron.  All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
esid: sec-update-expressions-static-semantics-early-errors
description: >
  In non-strict code, "arguments--" does not produce an early error.
info: |
  sec-identifiers-static-semantics-assignmenttargettype

    1. If this IdentifierReference is contained in strict mode code and StringValue of Identifier is "eval" or  "arguments", return strict.
    2. Return simple.

  sec-update-expressions-static-semantics-early-errors

    UpdateExpression : LeftHandSideExpression --

    It is an early Reference Error if AssignmentTargetType of LeftHandSideExpression is invalid.
    It is an early Syntax Error if AssignmentTargetType of LeftHandSideExpression is strict.
flags: [noStrict]
---*/

if (false) {
  arguments--;
}
