diff options
author | Michaël Zasso <targos@protonmail.com> | 2020-09-29 17:07:20 +0300 |
---|---|---|
committer | Michaël Zasso <targos@protonmail.com> | 2020-10-18 21:17:23 +0300 |
commit | b006fa8730eb516474ffbf568508edb81e8307fd (patch) | |
tree | af5b74f2ee745a251746bc90e44de26af93bbc12 | |
parent | 3c23af4cb7abc3f75650ef2ecb8b404515e26466 (diff) |
deps: V8: cherry-pick 6be2f6e26e8d
Original commit message:
[coverage] IncBlockCounter should not be side-effect
Incrementing coverage counter was triggering EvalError for
evaluateOnCallFrame when throwOnSideEffect is true.
R=jgruber@chromium.org, sigurds@chromium.org, yangguo@chromium.org
Bug: v8:10856
Change-Id: I0552e19a3a14ff61a9cb626494fb4a21979d535e
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2384011
Commit-Queue: Benjamin Coe <bencoe@google.com>
Reviewed-by: Jakob Gruber <jgruber@chromium.org>
Reviewed-by: Yang Guo <yangguo@chromium.org>
Reviewed-by: Sigurd Schneider <sigurds@chromium.org>
Cr-Commit-Position: refs/heads/master@{#69628}
Refs: https://github.com/v8/v8/commit/6be2f6e26e8ddfbc1a48c510672b319809674a34
PR-URL: https://github.com/nodejs/node/pull/35415
Reviewed-By: Rich Trott <rtrott@gmail.com>
Reviewed-By: Jiawen Geng <technicalcute@gmail.com>
Reviewed-By: Daniel Bevenius <daniel.bevenius@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Myles Borins <myles.borins@gmail.com>
-rw-r--r-- | common.gypi | 2 | ||||
-rw-r--r-- | deps/v8/src/debug/debug-evaluate.cc | 1 | ||||
-rw-r--r-- | deps/v8/test/inspector/debugger/side-effect-free-coverage-enabled-expected.txt | 3 | ||||
-rw-r--r-- | deps/v8/test/inspector/debugger/side-effect-free-coverage-enabled.js | 43 | ||||
-rw-r--r-- | deps/v8/test/inspector/inspector.status | 1 |
5 files changed, 49 insertions, 1 deletions
diff --git a/common.gypi b/common.gypi index 943bab5add3..5e5ac96a78f 100644 --- a/common.gypi +++ b/common.gypi @@ -36,7 +36,7 @@ # Reset this number to 0 on major V8 upgrades. # Increment by one for each non-official patch applied to deps/v8. - 'v8_embedder_string': '-node.11', + 'v8_embedder_string': '-node.12', ##### V8 defaults for Node.js ##### diff --git a/deps/v8/src/debug/debug-evaluate.cc b/deps/v8/src/debug/debug-evaluate.cc index 21b709325fc..c0ce638e642 100644 --- a/deps/v8/src/debug/debug-evaluate.cc +++ b/deps/v8/src/debug/debug-evaluate.cc @@ -473,6 +473,7 @@ bool BytecodeHasNoSideEffect(interpreter::Bytecode bytecode) { case Bytecode::kToNumeric: case Bytecode::kToString: // Misc. + case Bytecode::kIncBlockCounter: // Coverage counters. case Bytecode::kForInEnumerate: case Bytecode::kForInPrepare: case Bytecode::kForInContinue: diff --git a/deps/v8/test/inspector/debugger/side-effect-free-coverage-enabled-expected.txt b/deps/v8/test/inspector/debugger/side-effect-free-coverage-enabled-expected.txt new file mode 100644 index 00000000000..454d3196393 --- /dev/null +++ b/deps/v8/test/inspector/debugger/side-effect-free-coverage-enabled-expected.txt @@ -0,0 +1,3 @@ +Tests side-effect-free evaluation with coverage enabled +Paused on 'debugger;' +f() returns 1 diff --git a/deps/v8/test/inspector/debugger/side-effect-free-coverage-enabled.js b/deps/v8/test/inspector/debugger/side-effect-free-coverage-enabled.js new file mode 100644 index 00000000000..ffa86452287 --- /dev/null +++ b/deps/v8/test/inspector/debugger/side-effect-free-coverage-enabled.js @@ -0,0 +1,43 @@ +// Copyright 2020 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. + +let {session, contextGroup, Protocol} = InspectorTest.start('Tests side-effect-free evaluation with coverage enabled'); + +contextGroup.addScript(` +function testFunction() +{ + var o = 0; + function f() { return 1; } + function g() { o = 2; return o; } + f,g; + debugger; +} +//# sourceURL=foo.js`); + +// Side effect free call should not result in EvalError when coverage +// is enabled: +Protocol.Profiler.enable() +Protocol.Profiler.startPreciseCoverage({callCount: true, detailed: true}) + +Protocol.Debugger.enable(); + +Protocol.Debugger.oncePaused().then(debuggerPaused); + +Protocol.Runtime.evaluate({ "expression": "setTimeout(testFunction, 0)" }); + +var topFrameId; + +function debuggerPaused(messageObject) +{ + InspectorTest.log("Paused on 'debugger;'"); + + topFrameId = messageObject.params.callFrames[0].callFrameId; + Protocol.Debugger.evaluateOnCallFrame({ callFrameId: topFrameId, expression: "f()", throwOnSideEffect: true}).then(evaluatedFirst); +} + +function evaluatedFirst(response) +{ + InspectorTest.log("f() returns " + response.result.result.value); + InspectorTest.completeTest(); +} diff --git a/deps/v8/test/inspector/inspector.status b/deps/v8/test/inspector/inspector.status index ba2c5836254..8d1ec37bb5e 100644 --- a/deps/v8/test/inspector/inspector.status +++ b/deps/v8/test/inspector/inspector.status @@ -33,6 +33,7 @@ 'debugger/eval-scopes': [PASS, FAIL], 'debugger/scope-skip-variables-with-empty-name': [PASS, FAIL], 'debugger/update-call-frame-scopes': [PASS, FAIL], + 'debugger/side-effect-free-coverage-enabled': [PASS, FAIL], 'debugger/side-effect-free-debug-evaluate': [PASS, FAIL], 'debugger/evaluate-on-call-frame-in-module': [PASS, FAIL], }], # variant != default |