From 9feab2d208f0cd16cee4a11e0ba3bebb8cf71179 Mon Sep 17 00:00:00 2001 From: verwaest Date: Mon, 3 Oct 2016 10:21:00 -0700 Subject: [PATCH] Mark param as used when we force context allocation due to implement access through arguments Currently the parameter is first parsed as a reference, and then translated into a parameter. The reference stays around though, and gets resolved to the parameter. That automatically creates a use. Now that I drop all unresolved references when we abort preparsing, that also drops the unresolved reference. Instead, mark the variable as used when its marked as forced context allocation. That's what happens in almost all other cases. This raises the question: does it really make sense to parse parameters this ways? It seems pretty generic, but neither fast nor memory-efficient ... Did I misunderstand something? Just land if you think the CL looks good as is. BUG=chromium:651613 Review-Url: https://codereview.chromium.org/2386623002 Cr-Commit-Position: refs/heads/master@{#39935} --- src/ast/scopes.cc | 1 + .../regress-abort-context-allocate-params.js | 941 ++++++++++++++++++ 2 files changed, 942 insertions(+) create mode 100644 test/mjsunit/regress/regress-abort-context-allocate-params.js diff --git a/src/ast/scopes.cc b/src/ast/scopes.cc index bd50e21d7c..fbcdf90360 100644 --- a/src/ast/scopes.cc +++ b/src/ast/scopes.cc @@ -1743,6 +1743,7 @@ void DeclarationScope::AllocateParameterLocals() { DCHECK(!has_rest_ || var != rest_parameter()); DCHECK_EQ(this, var->scope()); if (uses_sloppy_arguments) { + var->set_is_used(); var->ForceContextAllocation(); } AllocateParameter(var, i); diff --git a/test/mjsunit/regress/regress-abort-context-allocate-params.js b/test/mjsunit/regress/regress-abort-context-allocate-params.js new file mode 100644 index 0000000000..3089f7817a --- /dev/null +++ b/test/mjsunit/regress/regress-abort-context-allocate-params.js @@ -0,0 +1,941 @@ +// Copyright 2016 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. + +function f(getter) { + arguments = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; + x = 1; +}