From 0164c09d4025df2bd1a42f14de29166aa0e7ac7a Mon Sep 17 00:00:00 2001 From: Richard Lau <rlau@redhat.com> Date: Wed, 26 Apr 2023 15:46:00 -0400 Subject: [PATCH] deps: V8: cherry-pick c5ab3e4f0c5a Original commit message: libstdc++: fix incomplete type in v8::internal::is_subtype<T, U> Using std::convertible with incomplete types is UB. However, till GCC 12 it was accepted and std::convertible returned false. This fails now for e.g. v8::internal::WasmArray. Use std::disjunction and std::conjunction instead which are short- circuiting, because std::is_base_of<T, T> is already true. Bug: chromium:957519 Change-Id: Ia26643dbdf0fb00d5586c71ae6b18e8d0f3cf96e Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/4394663 Commit-Queue: Stephan Hartmann <stha09@googlemail.com> Reviewed-by: Clemens Backes <clemensb@chromium.org> Cr-Commit-Position: refs/heads/main@{#86904} Refs: https://github.com/v8/v8/commit/c5ab3e4f0c5a3ce880941184ef8447c27cd19a93 --- common.gypi | 2 +- deps/v8/src/codegen/tnode.h | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/common.gypi b/common.gypi index 9b37dc9ff581a3..f8d98fb492db42 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.4', + 'v8_embedder_string': '-node.5', ##### V8 defaults for Node.js ##### diff --git a/deps/v8/src/codegen/tnode.h b/deps/v8/src/codegen/tnode.h index cd7bd8db98c241..7629e89ad693fe 100644 --- a/deps/v8/src/codegen/tnode.h +++ b/deps/v8/src/codegen/tnode.h @@ -269,8 +269,9 @@ using BuiltinPtr = Smi; template <class T, class U> struct is_subtype { static const bool value = - std::is_base_of<U, T>::value || (std::is_same<U, MaybeObject>::value && - std::is_convertible<T, Object>::value); + std::disjunction<std::is_base_of<U, T>, + std::conjunction<std::is_same<U, MaybeObject>, + std::is_convertible<T, Object>>>::value; }; template <class T1, class T2, class U> struct is_subtype<UnionT<T1, T2>, U> {