From 5f78ed1ecb671a6173054957d22709e6d5f78225 Mon Sep 17 00:00:00 2001 From: Keyhan Vakil Date: Tue, 19 Dec 2023 17:48:13 +0000 Subject: [PATCH] deps: V8: cherry-pick de611e69ad51 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 --- common.gypi | 2 +- deps/v8/src/maglev/maglev-code-generator.cc | 12 ++++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/common.gypi b/common.gypi index c6b9fa05b44c96..b8c5cf1da767aa 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 cb42c56148ead4..9b95c995429b70 100644 --- a/deps/v8/src/maglev/maglev-code-generator.cc +++ b/deps/v8/src/maglev/maglev-code-generator.cc @@ -419,7 +419,11 @@ class ParallelMoveResolver { void EmitMovesFromSource(RegisterT source_reg, GapMoveTargets&& targets) { DCHECK(moves_from_register_[source_reg.code()].is_empty()); if constexpr (DecompressIfNeeded) { - static_assert(COMPRESS_POINTERS_BOOL); + // 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); } @@ -462,7 +466,11 @@ class ParallelMoveResolver { // Decompress after the first move, subsequent moves reuse this register so // they're guaranteed to be decompressed. if constexpr (DecompressIfNeeded) { - static_assert(COMPRESS_POINTERS_BOOL); + // 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;