20a954f4bc
31 out of the 36 JS tests in test/mjsunit/harmony/weakrefs/ rely on precise GC with the following general pattern: they allocate some objects, clear all references to them, invoke a GC, then perform some test that assumes that the GC has reclaimed the objects. When conservative stack scanning is used, this may fail. This CL fixes the tests, ensuring that a precise GC will be invoked when necessary, without scanning the stack. To achieve this, the GC has to be invoked in asynchronous execution mode, which ensures that it will be invoked from the event loop without a stack. In some cases, this change requires a non-trivial change in the tests. In 5 tests, part of the test's objective was to verify that a weak reference is not cleared before the end of the turn. In those, it was not possible to invoke GC asynchronously, as this would immediately start a new turn. These tests still use synchronous GC and they have been modified, if necessary, to allow for CSS (i.e., to not test that all possible garbage is reclaimed after a sequential GC). Because of CSS, these tests may not always test everything that they were intended to. Tests with trivial fix: - cleanup-from-different-realm - cleanup - cleanup-proxy-from-different-realm - cleanupsome-2 - cleanupsome-after-unregister - cleanupsome - finalizationregistry-keeps-holdings-alive - multiple-dirty-finalization-groups - stress-finalizationregistry-dirty-enqueue - undefined-holdings - unregister-after-cleanup - unregister-before-cleanup - unregister-called-twice - unregister-inside-cleanup2 - unregister-inside-cleanup3 - unregister-inside-cleanup - unregister-many - unregister-when-cleanup-already-scheduled - weak-cell-basics Tests with non-trivial fixes; same logic but very restructured: - cleanup-is-not-a-microtask: - cleanup-on-detached-realm - finalizationregistry-scheduled-for-cleanup-multiple-times - finalizationregistry-independent-lifetime - finalizationregistry-independent-lifetime-multiple - reentrant-gc-from-cleanup - symbol-in-finalizationregistry (was 2nd part of former symbol-as-weakref-target-gc) - weak-unregistertoken Tests with non-trivial fixes; same logic, restructured, using synchronous GC: - finalizationregistry-and-weakref - symbol-as-weakref-target-gc (was 1st part of former symbol-as-weakref-target-gc) - two-weakrefs - weakref-creation-keeps-alive - weakref-deref-keeps-alive Bug: v8:13257 Bug: v8:13662 Change-Id: I53586bd16cdb98fa976e1fa798ef498bdf286238 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/4191774 Reviewed-by: Marja Hölttä <marja@chromium.org> Reviewed-by: Shu-yu Guo <syg@chromium.org> Commit-Queue: Nikolaos Papaspyrou <nikolaos@chromium.org> Cr-Commit-Position: refs/heads/main@{#85477} |
||
---|---|---|
.github | ||
bazel | ||
build_overrides | ||
custom_deps | ||
docs | ||
gni | ||
include | ||
infra | ||
samples | ||
src | ||
test | ||
testing | ||
third_party | ||
tools | ||
.bazelrc | ||
.clang-format | ||
.clang-tidy | ||
.editorconfig | ||
.flake8 | ||
.git-blame-ignore-revs | ||
.gitattributes | ||
.gitignore | ||
.gn | ||
.mailmap | ||
.style.yapf | ||
.vpython3 | ||
.ycm_extra_conf.py | ||
AUTHORS | ||
BUILD.bazel | ||
BUILD.gn | ||
CODE_OF_CONDUCT.md | ||
codereview.settings | ||
COMMON_OWNERS | ||
DEPS | ||
DIR_METADATA | ||
ENG_REVIEW_OWNERS | ||
INFRA_OWNERS | ||
INTL_OWNERS | ||
LICENSE | ||
LICENSE.fdlibm | ||
LICENSE.strongtalk | ||
LICENSE.v8 | ||
LOONG_OWNERS | ||
MIPS_OWNERS | ||
OWNERS | ||
PPC_OWNERS | ||
PRESUBMIT.py | ||
README.md | ||
RISCV_OWNERS | ||
S390_OWNERS | ||
WATCHLISTS | ||
WORKSPACE |
V8 JavaScript Engine
V8 is Google's open source JavaScript engine.
V8 implements ECMAScript as specified in ECMA-262.
V8 is written in C++ and is used in Google Chrome, the open source browser from Google.
V8 can run standalone, or can be embedded into any C++ application.
V8 Project page: https://v8.dev/docs
Getting the Code
Checkout depot tools, and run
fetch v8
This will checkout V8 into the directory v8
and fetch all of its dependencies.
To stay up to date, run
git pull origin
gclient sync
For fetching all branches, add the following into your remote
configuration in .git/config
:
fetch = +refs/branch-heads/*:refs/remotes/branch-heads/*
fetch = +refs/tags/*:refs/tags/*
Contributing
Please follow the instructions mentioned at v8.dev/docs/contribute.