From 61d1535d84a49cf2ffe8bc397eacdb13187b7d22 Mon Sep 17 00:00:00 2001 From: Keyhan Vakil Date: Thu, 21 Dec 2023 09:44:19 -0800 Subject: [PATCH] deps: V8: cherry-pick de611e69ad51 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Original commit message: [maglev] fix non-ptr-compr compilation on old compilers When pointer compression is disabled, the preprocessor expands some static asserts to static_assert(false), which doesn't compile on compilers not implementing the C++ defect report CWG2518, notably clang before version 17 and gcc before version 13. Adding in part of the template parameter to the static assert prevents it from being evaluated immediately which fixes the compilation. Test: compiled with gcc-11 and clang-14 without pointer compression. Change-Id: I95ce29bdb1278e6dad9e592d6f9476395f8aeb59 Fixed: v8:14355 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/5022760 Reviewed-by: Leszek Swirski Commit-Queue: Leszek Swirski Cr-Commit-Position: refs/heads/main@{#91553} Refs: https://github.com/v8/v8/commit/de611e69ad517c02d16bd1f9fd450b0d20379152 PR-URL: https://github.com/nodejs/node/pull/51200 Refs: https://github.com/nodejs/node/issues/50690 Reviewed-By: Yagiz Nizipli Reviewed-By: Michaƫl Zasso Reviewed-By: Richard Lau --- common.gypi | 2 +- deps/v8/src/maglev/maglev-code-generator.cc | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/common.gypi b/common.gypi index fa0729ffe45e8f..efcd8da848150d 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.18', + 'v8_embedder_string': '-node.19', ##### V8 defaults for Node.js ##### diff --git a/deps/v8/src/maglev/maglev-code-generator.cc b/deps/v8/src/maglev/maglev-code-generator.cc index 1c221459f7603e..0b0943d50251ba 100644 --- a/deps/v8/src/maglev/maglev-code-generator.cc +++ b/deps/v8/src/maglev/maglev-code-generator.cc @@ -415,6 +415,11 @@ class ParallelMoveResolver { void EmitMovesFromSource(RegisterT source_reg, GapMoveTargets&& targets) { DCHECK(moves_from_register_[source_reg.code()].is_empty()); if constexpr (DecompressIfNeeded) { + // The DecompressIfNeeded clause is redundant with the if-constexpr above, + // but otherwise this code cannot be compiled by compilers not yet + // implementing CWG2518. + static_assert(DecompressIfNeeded && COMPRESS_POINTERS_BOOL); + if (targets.needs_decompression == kNeedsDecompression) { __ DecompressTagged(source_reg, source_reg); } @@ -457,6 +462,11 @@ class ParallelMoveResolver { // Decompress after the first move, subsequent moves reuse this register so // they're guaranteed to be decompressed. if constexpr (DecompressIfNeeded) { + // The DecompressIfNeeded clause is redundant with the if-constexpr above, + // but otherwise this code cannot be compiled by compilers not yet + // implementing CWG2518. + static_assert(DecompressIfNeeded && COMPRESS_POINTERS_BOOL); + if (targets.needs_decompression == kNeedsDecompression) { __ DecompressTagged(register_with_slot_value, register_with_slot_value); targets.needs_decompression = kDoesNotNeedDecompression;