electron/patches/v8/fix_disable_scope_reuse_associated_dchecks.patch
electron-roller[bot] e32e85abb2
chore: bump chromium to 130.0.6723.19 (33-x-y) (#43975)
* chore: bump chromium in DEPS to 130.0.6723.19

* chore: update patches

---------

Co-authored-by: electron-roller[bot] <84116207+electron-roller[bot]@users.noreply.github.com>
Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
2024-09-26 12:47:11 -04:00

43 lines
2.2 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Calvin Watford <cwatford@slack-corp.com>
Date: Wed, 17 Jul 2024 12:52:10 -0600
Subject: fix: disable scope reuse & associated dchecks
This change was introduced in https://crrev.com/c/5630974 which reuses
scope info objects across allocations. Unfortunately, this change seems
to be not yet fully cooked and causes crashes with normal usage of V8.
In particular, Node.js call's V8's `v8::ScriptCompiler::CompileFunction`
method. This ends up wrapping the source code in a function, which this
code is not yet prepared to handle. The generated function wrapper
(created by V8) has no source position, so it reports being at the start
of the source, which may overlap with other scopes that are in the
original source. This new feature adds a "UniqueIdInScript" concept that
is derived from the source position of a scope, along with the invariant
that inner scopes have a higher ID than outer scopes, which does not
hold for the above situation.
This patch is not intended to remain indefinitely. Once the upstream
feature stabilizes, we can remove this patch. Unfortunately, there is no
public tracking bug for this feature nor the crashes its been causing,
so we'll have to keep an eye on this for the time being.
diff --git a/src/ast/scopes.cc b/src/ast/scopes.cc
index 57a9dca1a84dee95d36c2b296fc170399db3e213..5db78a650068faa0bacf05b13d86860c9616e20e 100644
--- a/src/ast/scopes.cc
+++ b/src/ast/scopes.cc
@@ -2731,10 +2731,10 @@ void Scope::AllocateScopeInfosRecursively(
for (Scope* scope = inner_scope_; scope != nullptr; scope = scope->sibling_) {
#ifdef DEBUG
if (!scope->is_hidden_catch_scope()) {
- DCHECK_GT(scope->UniqueIdInScript(), UniqueIdInScript());
- DCHECK_IMPLIES(
- scope->sibling_ && !scope->sibling_->is_hidden_catch_scope(),
- scope->sibling_->UniqueIdInScript() != scope->UniqueIdInScript());
+ // DCHECK_GT(scope->UniqueIdInScript(), UniqueIdInScript());
+ // DCHECK_IMPLIES(
+ // scope->sibling_ && !scope->sibling_->is_hidden_catch_scope(),
+ // scope->sibling_->UniqueIdInScript() != scope->UniqueIdInScript());
}
#endif
if (!scope->is_function_scope() ||