File v8-builtin_call_descriptors-Wchanges-meaning.patch of Package nodejs-electron39

From fed47445bbdd1a69b70f2b93a761c62c1e0f769c Mon Sep 17 00:00:00 2001
From: Abdirahim Musse <abdirahim.musse@ibm.com>
Date: Tue, 7 Oct 2025 16:28:34 -0500
Subject: [PATCH] Fix build on gcc

This commit fixes two issues

1.

```
In file included from ../../src/compiler/turboshaft/assembler.h:37,
                 from ../../src/wasm/turboshaft-graph-interface.h:13,
                 from ../../src/wasm/function-compiler.cc:20:
../../src/compiler/turboshaft/builtin-call-descriptors.h:26:55: error: declaration of 'static constexpr v8::internal::compiler::turboshaft::detail::IndexTag<1> v8::internal::compiler::turboshaft::builtin::BigIntAdd::Arguments::index_counter(v8::internal::compiler::turboshaft::detail::IndexTag<1>)' changes meaning of 'index_counter' [-fpermissive]
```

GCC is more strict on accessing the fields from a inner struct. The fix
was to wrap the base declarations in a struct and have Arguments struct
inheirt from the base.

2. In maglev-ir.h and maglev-range-analysis.h fixed up `error: call to
non-'constexpr'` issues.

Change-Id: I175700665c7bbb4f07588e9cac3d55d9afce44d0
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/6987408
Reviewed-by: Jakob Linke <jgruber@chromium.org>
Commit-Queue: Jakob Linke <jgruber@chromium.org>
Reviewed-by: Milad Farazmand <mfarazma@ibm.com>
Reviewed-by: Nico Hartmann <nicohartmann@chromium.org>
Cr-Commit-Position: refs/heads/main@{#103041}
---
 .../turboshaft/builtin-call-descriptors.h     | 86 ++++++++++---------
 src/maglev/maglev-ir.h                        |  2 +-
 src/maglev/maglev-range-analysis.h            |  2 +-
 3 files changed, 46 insertions(+), 44 deletions(-)

diff --git a/src/compiler/turboshaft/builtin-call-descriptors.h b/src/compiler/turboshaft/builtin-call-descriptors.h
index 1a6e66969cc9..53c194f937cc 100644
--- a/v8/src/compiler/turboshaft/builtin-call-descriptors.h
+++ b/v8/src/compiler/turboshaft/builtin-call-descriptors.h
@@ -66,12 +66,14 @@ struct builtin {
   // if necessary.
   static constexpr std::size_t kMaxArgumentCount = 8;
   using arguments_vector_t = base::SmallVector<OpIndex, kMaxArgumentCount>;
-  static constexpr inline detail::IndexTag<0> index_counter(
-      detail::IndexTag<0>);
-  static constexpr base::tmp::list<> make_args_type_list_n(detail::IndexTag<0>);
-
+  // TODO(abmusse): use ArgumentsBase (until we can use GCC 13 or better)
+  struct ArgumentsBase {
+    static constexpr inline detail::IndexTag<0> index_counter(
+        detail::IndexTag<0>);
+    static constexpr base::tmp::list<> make_args_type_list_n(
+        detail::IndexTag<0>);
+  };
   static constexpr OpEffects base_effects = OpEffects().CanDependOnChecks();
-
   template <typename A>
   static arguments_vector_t ArgumentsToVector(const A& args) {
     arguments_vector_t result;
@@ -169,7 +171,7 @@ struct builtin {
 
   struct BigIntAdd : public Descriptor<BigIntAdd> {
     static constexpr auto kFunction = Builtin::kBigIntAdd;
-    struct Arguments {
+    struct Arguments : ArgumentsBase {
       ARG(V<Numeric>, left)
       ARG(V<Numeric>, right)
     };
@@ -183,7 +185,7 @@ struct builtin {
 
   struct CheckTurbofanType : public Descriptor<CheckTurbofanType> {
     static constexpr auto kFunction = Builtin::kCheckTurbofanType;
-    struct Arguments {
+    struct Arguments : ArgumentsBase {
       ARG(V<Object>, value)
       ARG(V<TurbofanType>, expected_type)
       ARG(V<Smi>, node_id)
@@ -201,7 +203,7 @@ struct builtin {
 #define DECL_GENERIC_BINOP(Name)                                          \
   struct Name : public Descriptor<Name> {                                 \
     static constexpr auto kFunction = Builtin::k##Name;                   \
-    struct Arguments {                                                    \
+    struct Arguments : ArgumentsBase {                                    \
       ARG(V<Object>, left)                                                \
       ARG(V<Object>, right)                                               \
     };                                                                    \
@@ -219,7 +221,7 @@ struct builtin {
 #define DECL_GENERIC_UNOP(Name)                                           \
   struct Name : public Descriptor<Name> {                                 \
     static constexpr auto kFunction = Builtin::k##Name;                   \
-    struct Arguments {                                                    \
+    struct Arguments : ArgumentsBase {                                    \
       ARG(V<Object>, input)                                               \
     };                                                                    \
     using returns_t = std::tuple<V<Object>>;                              \
@@ -235,7 +237,7 @@ struct builtin {
 
   struct DetachContextCell : public Descriptor<DetachContextCell> {
     static constexpr auto kFunction = Builtin::kDetachContextCell;
-    struct Arguments {
+    struct Arguments : ArgumentsBase {
       ARG(V<Context>, the_context)
       ARG(V<Object>, new_value)
       ARG(V<WordPtr>, i)
@@ -251,7 +253,7 @@ struct builtin {
 
   struct ToNumber : public Descriptor<ToNumber> {
     static constexpr auto kFunction = Builtin::kToNumber;
-    struct Arguments {
+    struct Arguments : ArgumentsBase {
       ARG(V<Object>, input)
     };
     using returns_t = std::tuple<V<Number>>;
@@ -264,7 +266,7 @@ struct builtin {
 
   struct NonNumberToNumber : public Descriptor<NonNumberToNumber> {
     static constexpr auto kFunction = Builtin::kNonNumberToNumber;
-    struct Arguments {
+    struct Arguments : ArgumentsBase {
       ARG(V<JSAnyNotNumber>, input)
     };
     using returns_t = std::tuple<V<Number>>;
@@ -277,7 +279,7 @@ struct builtin {
 
   struct ToNumeric : public Descriptor<ToNumeric> {
     static constexpr auto kFunction = Builtin::kToNumeric;
-    struct Arguments {
+    struct Arguments : ArgumentsBase {
       ARG(V<Object>, input)
     };
     using returns_t = std::tuple<V<Numeric>>;
@@ -290,7 +292,7 @@ struct builtin {
 
   struct NonNumberToNumeric : public Descriptor<NonNumberToNumeric> {
     static constexpr auto kFunction = Builtin::kNonNumberToNumeric;
-    struct Arguments {
+    struct Arguments : ArgumentsBase {
       ARG(V<JSAnyNotNumber>, input)
     };
     using returns_t = std::tuple<V<Numeric>>;
@@ -304,7 +306,7 @@ struct builtin {
   struct CopyFastSmiOrObjectElements
       : public Descriptor<CopyFastSmiOrObjectElements> {
     static constexpr auto kFunction = Builtin::kCopyFastSmiOrObjectElements;
-    struct Arguments {
+    struct Arguments : ArgumentsBase {
       ARG(V<Object>, object)
     };
     using returns_t = std::tuple<V<Object>>;
@@ -321,7 +323,7 @@ struct builtin {
     static constexpr auto kFunction = B;
     using StringOrSmi = Union<String, Smi>;
     // We use smi:0 for an empty label.
-    struct Arguments {
+    struct Arguments : ArgumentsBase {
       ARG(V<StringOrSmi>, label_or_0)
       ARG(V<Input>, value)
     };
@@ -343,7 +345,7 @@ struct builtin {
   template <Builtin B>
   struct FindOrderedHashEntry : public Descriptor<FindOrderedHashEntry<B>> {
     static constexpr auto kFunction = B;
-    struct Arguments {
+    struct Arguments : ArgumentsBase {
       ARG(V<Object>, table)
       ARG(V<Smi>, key)
     };
@@ -363,7 +365,7 @@ struct builtin {
   template <Builtin B>
   struct GrowFastElements : public Descriptor<GrowFastElements<B>> {
     static constexpr auto kFunction = B;
-    struct Arguments {
+    struct Arguments : ArgumentsBase {
       ARG(V<Object>, object)
       ARG(V<Smi>, size)
     };
@@ -383,7 +385,7 @@ struct builtin {
   template <Builtin B>
   struct NewArgumentsElements : public Descriptor<NewArgumentsElements<B>> {
     static constexpr auto kFunction = B;
-    struct Arguments {
+    struct Arguments : ArgumentsBase {
       // TODO(nicohartmann@): First argument should be replaced by a proper
       // RawPtr.
       ARG(V<WordPtr>, frame)
@@ -406,7 +408,7 @@ struct builtin {
 
   struct NumberToString : public Descriptor<NumberToString> {
     static constexpr auto kFunction = Builtin::kNumberToString;
-    struct Arguments {
+    struct Arguments : ArgumentsBase {
       ARG(V<Number>, input)
     };
     using returns_t = std::tuple<V<String>>;
@@ -420,7 +422,7 @@ struct builtin {
 
   struct ToString : public Descriptor<ToString> {
     static constexpr auto kFunction = Builtin::kToString;
-    struct Arguments {
+    struct Arguments : ArgumentsBase {
       ARG(V<Object>, o)
     };
     using returns_t = std::tuple<V<String>>;
@@ -433,7 +435,7 @@ struct builtin {
 
   struct PlainPrimitiveToNumber : public Descriptor<PlainPrimitiveToNumber> {
     static constexpr auto kFunction = Builtin::kPlainPrimitiveToNumber;
-    struct Arguments {
+    struct Arguments : ArgumentsBase {
       ARG(V<PlainPrimitive>, input)
     };
     using returns_t = std::tuple<V<Number>>;
@@ -447,7 +449,7 @@ struct builtin {
 
   struct SameValue : public Descriptor<SameValue> {
     static constexpr auto kFunction = Builtin::kSameValue;
-    struct Arguments {
+    struct Arguments : ArgumentsBase {
       ARG(V<Object>, left)
       ARG(V<Object>, right)
     };
@@ -462,7 +464,7 @@ struct builtin {
 
   struct SameValueNumbersOnly : public Descriptor<SameValueNumbersOnly> {
     static constexpr auto kFunction = Builtin::kSameValueNumbersOnly;
-    struct Arguments {
+    struct Arguments : ArgumentsBase {
       ARG(V<Object>, left)
       ARG(V<Object>, right)
     };
@@ -476,7 +478,7 @@ struct builtin {
 
   struct StringAdd_CheckNone : public Descriptor<StringAdd_CheckNone> {
     static constexpr auto kFunction = Builtin::kStringAdd_CheckNone;
-    struct Arguments {
+    struct Arguments : ArgumentsBase {
       ARG(V<String>, left)
       ARG(V<String>, right)
     };
@@ -494,7 +496,7 @@ struct builtin {
 
   struct StringEqual : public Descriptor<StringEqual> {
     static constexpr auto kFunction = Builtin::kStringEqual;
-    struct Arguments {
+    struct Arguments : ArgumentsBase {
       ARG(V<String>, left)
       ARG(V<String>, right)
       ARG(V<WordPtr>, length)
@@ -512,7 +514,7 @@ struct builtin {
 
   struct StringFromCodePointAt : public Descriptor<StringFromCodePointAt> {
     static constexpr auto kFunction = Builtin::kStringFromCodePointAt;
-    struct Arguments {
+    struct Arguments : ArgumentsBase {
       ARG(V<String>, receiver)
       ARG(V<WordPtr>, position)
     };
@@ -527,7 +529,7 @@ struct builtin {
 
   struct StringIndexOf : public Descriptor<StringIndexOf> {
     static constexpr auto kFunction = Builtin::kStringIndexOf;
-    struct Arguments {
+    struct Arguments : ArgumentsBase {
       ARG(V<String>, s)
       ARG(V<String>, search_string)
       ARG(V<Smi>, start)
@@ -545,7 +547,7 @@ struct builtin {
 
   struct StringCompare : public Descriptor<StringCompare> {
     static constexpr auto kFunction = Builtin::kStringCompare;
-    struct Arguments {
+    struct Arguments : ArgumentsBase {
       ARG(V<String>, left)
       ARG(V<String>, right)
     };
@@ -561,7 +563,7 @@ struct builtin {
   template <Builtin B>
   struct StringComparison : public Descriptor<StringComparison<B>> {
     static constexpr auto kFunction = B;
-    struct Arguments {
+    struct Arguments : ArgumentsBase {
       ARG(V<String>, left)
       ARG(V<String>, right)
     };
@@ -579,7 +581,7 @@ struct builtin {
 
   struct StringSubstring : public Descriptor<StringSubstring> {
     static constexpr auto kFunction = Builtin::kStringSubstring;
-    struct Arguments {
+    struct Arguments : ArgumentsBase {
       ARG(V<String>, string)
       ARG(V<WordPtr>, from)
       ARG(V<WordPtr>, to)
@@ -596,7 +598,7 @@ struct builtin {
 #ifdef V8_INTL_SUPPORT
   struct StringToLowerCaseIntl : public Descriptor<StringToLowerCaseIntl> {
     static constexpr auto kFunction = Builtin::kStringToLowerCaseIntl;
-    struct Arguments {
+    struct Arguments : ArgumentsBase {
       ARG(V<String>, string)
     };
     using returns_t = std::tuple<V<String>>;
@@ -612,7 +614,7 @@ struct builtin {
 
   struct StringToNumber : public Descriptor<StringToNumber> {
     static constexpr auto kFunction = Builtin::kStringToNumber;
-    struct Arguments {
+    struct Arguments : ArgumentsBase {
       ARG(V<String>, input)
     };
     using returns_t = std::tuple<V<Number>>;
@@ -626,7 +628,7 @@ struct builtin {
 
   struct ToBoolean : public Descriptor<ToBoolean> {
     static constexpr auto kFunction = Builtin::kToBoolean;
-    struct Arguments {
+    struct Arguments : ArgumentsBase {
       ARG(V<Object>, input)
     };
     using returns_t = std::tuple<V<Boolean>>;
@@ -639,7 +641,7 @@ struct builtin {
 
   struct ToObject : public Descriptor<ToObject> {
     static constexpr auto kFunction = Builtin::kToObject;
-    struct Arguments {
+    struct Arguments : ArgumentsBase {
       ARG(V<Object>, input)
     };
     using returns_t = std::tuple<V<JSReceiver>>;
@@ -654,7 +656,7 @@ struct builtin {
   template <Builtin B>
   struct CreateFunctionContext : public Descriptor<CreateFunctionContext<B>> {
     static constexpr auto kFunction = B;
-    struct Arguments {
+    struct Arguments : ArgumentsBase {
       ARG(V<ScopeInfo>, scope_info)
       ARG(V<Word32>, slots)
     };
@@ -674,7 +676,7 @@ struct builtin {
 
   struct FastNewClosure : public Descriptor<FastNewClosure> {
     static constexpr auto kFunction = Builtin::kFastNewClosure;
-    struct Arguments {
+    struct Arguments : ArgumentsBase {
       ARG(V<SharedFunctionInfo>, shared_function_info)
       ARG(V<FeedbackCell>, feedback_cell)
     };
@@ -690,7 +692,7 @@ struct builtin {
 
   struct Typeof : public Descriptor<Typeof> {
     static constexpr auto kFunction = Builtin::kTypeof;
-    struct Arguments {
+    struct Arguments : ArgumentsBase {
       ARG(V<Object>, object)
     };
     using returns_t = std::tuple<V<String>>;
@@ -704,7 +706,7 @@ struct builtin {
   struct CheckTurboshaftWord32Type
       : public Descriptor<CheckTurboshaftWord32Type> {
     static constexpr auto kFunction = Builtin::kCheckTurboshaftWord32Type;
-    struct Arguments {
+    struct Arguments : ArgumentsBase {
       ARG(V<Word32>, value)
       ARG(V<TurboshaftWord32Type>, expected_type)
       ARG(V<Smi>, node_id)
@@ -720,7 +722,7 @@ struct builtin {
   struct CheckTurboshaftWord64Type
       : public Descriptor<CheckTurboshaftWord64Type> {
     static constexpr auto kFunction = Builtin::kCheckTurboshaftWord64Type;
-    struct Arguments {
+    struct Arguments : ArgumentsBase {
       ARG(V<Word32>, value_high)
       ARG(V<Word32>, value_low)
       ARG(V<TurboshaftWord64Type>, expected_type)
@@ -737,7 +739,7 @@ struct builtin {
   struct CheckTurboshaftFloat32Type
       : public Descriptor<CheckTurboshaftFloat32Type> {
     static constexpr auto kFunction = Builtin::kCheckTurboshaftFloat32Type;
-    struct Arguments {
+    struct Arguments : ArgumentsBase {
       ARG(V<Float32>, value)
       ARG(V<TurboshaftFloat64Type>, expected_type)
       ARG(V<Smi>, node_id)
@@ -753,7 +755,7 @@ struct builtin {
   struct CheckTurboshaftFloat64Type
       : public Descriptor<CheckTurboshaftFloat64Type> {
     static constexpr auto kFunction = Builtin::kCheckTurboshaftFloat64Type;
-    struct Arguments {
+    struct Arguments : ArgumentsBase {
       ARG(V<Float64>, value)
       ARG(V<TurboshaftFloat64Type>, expected_type)
       ARG(V<Smi>, node_id)
diff --git a/src/maglev/maglev-ir.h b/src/maglev/maglev-ir.h
index dc48932a486e..e741e7f7aaa6 100644
--- a/v8/src/maglev/maglev-ir.h
+++ b/v8/src/maglev/maglev-ir.h
@@ -6553,7 +6553,7 @@ class VirtualObject : public FixedInputValueNodeT<0, VirtualObject> {
 
   int slot_count() const { return slots_.length(); }
 
-  vobj::ObjectType object_type() const {
+  constexpr vobj::ObjectType object_type() const {
     return object_layout_->object_type;
   }
 
openSUSE Build Service is sponsored by