Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package nodejs24 for openSUSE:Factory checked in at 2025-12-08 17:23:04 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/nodejs24 (Old) and /work/SRC/openSUSE:Factory/.nodejs24.new.1939 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "nodejs24" Mon Dec 8 17:23:04 2025 rev:2 rq:1320906 version:24.11.1 Changes: -------- --- /work/SRC/openSUSE:Factory/nodejs24/nodejs24.changes 2025-11-28 16:54:49.519068270 +0100 +++ /work/SRC/openSUSE:Factory/.nodejs24.new.1939/nodejs24.changes 2025-12-08 17:23:06.122875027 +0100 @@ -1,0 +2,13 @@ +Tue Dec 2 19:13:41 UTC 2025 - Adam Majer <[email protected]> + +- icu_781.patch: Add support for ICU 78.1 +- bundle nghttp2 for TW, as upstream is carrying a patch on-top + due to changes in nghttp2. See: + https://github.com/nodejs/node/issues/60661 + +------------------------------------------------------------------- +Tue Dec 2 13:17:26 UTC 2025 - Adam Majer <[email protected]> + +- v8_nameclash.patch: Backport fix + +------------------------------------------------------------------- @@ -9,7 +22,2 @@ - * cares_public_headers.patch, fix_ci_tests.patch, flaky_test_rerun.patch, - gcc13.patch, icu_732.patch, legacy_python.patch, linker_lto_jobs.patch, - manual_configure.patch, node-gyp-addon-gypi.patch, - nodejs-libpath.patch, npm_search_paths.patch, old_cares.patch, - openssl_binary_detection.patch, qemu_timeouts_arches.patch, - sle12_python3_compat.patch, test-skip-y2038-on-32bit-time_t.patch, v8-i586.patch, - versioned.patch + * fix_ci_tests.patch, flaky_test_rerun.patch, node-gyp-addon-gypi.patch, + nodejs-libpath.patch, npm_search_paths.patch, versioned.patch New: ---- icu_781.patch v8_nameclash.patch ----------(New B)---------- New: - icu_781.patch: Add support for ICU 78.1 - bundle nghttp2 for TW, as upstream is carrying a patch on-top New: - v8_nameclash.patch: Backport fix ----------(New E)---------- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ nodejs24.spec ++++++ --- /var/tmp/diff_new_pack.LJ5pOF/_old 2025-12-08 17:23:07.678933772 +0100 +++ /var/tmp/diff_new_pack.LJ5pOF/_new 2025-12-08 17:23:07.678933772 +0100 @@ -108,7 +108,7 @@ %bcond_without intree_icu %endif -%if 0%{?suse_version} >= 1550 +%if 0%{?suse_version} >= 1750 %bcond_with intree_nghttp2 %else %bcond_without intree_nghttp2 @@ -145,8 +145,8 @@ ## Patches not distribution specific Patch3: fix_ci_tests.patch - - +Patch4: v8_nameclash.patch +Patch5: icu_781.patch ## Patches specific to SUSE and openSUSE # PATCH-FIX-OPENSUSE -- set correct path for dtrace if it is built @@ -177,52 +177,11 @@ BuildRequires: config(netcfg) %endif -# SLE-11 target only -# Node.js 6 requires GCC 4.8.5+. -# -# For Node.js 8.x, upstream requires GCC 4.9.4+, as GCC 4.8 may have -# slightly buggy C++11 support: https://github.com/nodejs/node/pull/13466 -# -# If the default compiler is not supported, use the most recent compiler -# version available. -%if 0%{?suse_version} == 1110 -# GCC 5 is only available in the SUSE:SLE-11:SP4:Update repository (SDK). -%if %node_version_number >= 8 -BuildRequires: gcc5-c++ -%define forced_gcc_version 5 -%else -BuildRequires: gcc48-c++ -%define forced_gcc_version 4.8 -%endif -%endif -# sles == 11 block - -# Pick and stick with "latest" compiler at time of LTS release -# for SLE-12:Update targets -%if 0%{?suse_version} == 1315 -%if %node_version_number >= 17 -BuildRequires: gcc12-c++ -BuildRequires: gcc12-PIE -%define forced_gcc_version 12 -%else -%if %node_version_number >= 14 -BuildRequires: gcc9-c++ -%define forced_gcc_version 9 -%else -%if %node_version_number >= 8 -BuildRequires: gcc7-c++ -%define forced_gcc_version 7 -%endif -%endif -%endif -%endif - +# Compiler selection %if 0%{?suse_version} == 1500 -%if %node_version_number >= 17 -BuildRequires: gcc12-c++ -BuildRequires: gcc12-PIE -%define forced_gcc_version 12 -%endif +BuildRequires: gcc13-c++ +BuildRequires: gcc13-PIE +%define forced_gcc_version 13 %endif # compiler selection @@ -233,13 +192,7 @@ # Python dependencies -%if %node_version_number >= 14 - %if 0%{?suse_version} -%if 0%{?suse_version} < 1500 -BuildRequires: python36 -%define forced_python_version 3.6m -%endif %if %{?suse_version} == 1500 BuildRequires: python311 %define forced_python_version 3.11 @@ -248,23 +201,11 @@ BuildRequires: python3 BuildRequires: python3-setuptools %endif -%endif - %else -%if %node_version_number >= 12 BuildRequires: python3 - -%else -%if 0%{?suse_version} >= 1500 -BuildRequires: python2 -%else -BuildRequires: python -%endif - -%endif %endif -%if 0%{?suse_version} >= 1500 && %{node_version_number} >= 10 +%if 0%{?suse_version} >= 1500 BuildRequires: user(nobody) BuildRequires: group(nobody) %endif @@ -629,55 +570,11 @@ %setup -q -n node-%{version} %endif -%if %{node_version_number} == 16 -tar zxf %{S:12} -%endif - -%if %{node_version_number} <= 10 -rm -r deps/npm/* -pushd deps/npm -tar zxf %{SOURCE9} --strip-components=1 -tar Jxf %{SOURCE90} -popd -%endif - %if %{node_version_number} >= 10 tar Jxf %{SOURCE11} %endif -# downgrade node-gyp to last version that supports python 3.4 for SLE12 -%if 0%{?suse_version} && 0%{?suse_version} < 1500 && %{node_version_number} >= 16 && %{node_version_number} < 22 -rm -r deps/npm/node_modules/node-gyp -mkdir deps/npm/node_modules/node-gyp -pushd deps/npm/node_modules/node-gyp -tar Jxf %{SOURCE5} -popd - -%if %{node_version_number} >= 19 -%else -%endif -%endif - -%patch -P 3 -p1 -%if 0%{?suse_version} < 1500 -%endif -%if %{node_version_number} <= 12 && 0%{?suse_version} < 1500 -%endif -%if 0%{with valgrind_tests} -%endif -%patch -P 101 -p1 -%if 0%{?suse_version} >= 1500 || 0%{?suse_version} == 0 -%patch -P 102 -p1 -%endif -# Add check_output to configure script (not part of Python 2.6 in SLE11). -%if 0%{?suse_version} == 1110 -%endif -%patch -P 104 -p1 -%patch -P 120 -p1 -%if ! 0%{with openssl_RSA_get0_pss_params} -%endif -%patch -P 200 -p1 - +%autopatch -p1 %if %{node_version_number} == 12 # minimist security update - patch50 @@ -909,6 +806,10 @@ export CI_JS_SUITES=default export NODE_TEST_NO_INTERNET=1 +%ifarch %{ix86} %{arm} +rm -f test/parallel/test-fs-utimes-y2K38.js +%endif + %if %{node_version_number} >= 12 find test \( -name \*.out -or -name \*.js -or -name \*.snapshot \) -exec sed -i 's,Use `node ,Use `node%{node_version_number} ,' {} \; %endif @@ -943,7 +844,7 @@ rm test/parallel/test-dgram-membership.js %if %{node_version_number} > 20 # missing ICU test data for 15.6/15.7/SLFO -ln test/fixtures/icu/localizationData-v74.2.json test/fixtures/icu/localizationData-v73.2.json +ln test/fixtures/icu/localizationData-v75.1.json test/fixtures/icu/localizationData-v73.2.json %endif %if %{node_version_number} >= 18 ++++++ _scmsync.obsinfo ++++++ --- /var/tmp/diff_new_pack.LJ5pOF/_old 2025-12-08 17:23:07.806938605 +0100 +++ /var/tmp/diff_new_pack.LJ5pOF/_new 2025-12-08 17:23:07.814938907 +0100 @@ -1,6 +1,6 @@ -mtime: 1764072935 -commit: 56f9da042a72bf8dc30d4039b212df0e0c78d28eba45bc37b1eb3da67794a617 +mtime: 1764703289 +commit: 32a120641282be6f09e8df7712fd730ee72c28a3db8769b45acffb85aafc33c9 url: https://src.opensuse.org/nodejs/nodejs24.git -revision: 56f9da042a72bf8dc30d4039b212df0e0c78d28eba45bc37b1eb3da67794a617 +revision: 32a120641282be6f09e8df7712fd730ee72c28a3db8769b45acffb85aafc33c9 projectscmsync: https://src.opensuse.org/nodejs/_ObsPrj.git ++++++ build.specials.obscpio ++++++ ++++++ build.specials.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/.gitignore new/.gitignore --- old/.gitignore 1970-01-01 01:00:00.000000000 +0100 +++ new/.gitignore 2025-12-02 20:22:20.000000000 +0100 @@ -0,0 +1,4 @@ +*.obscpio +*.osc +_build.* +.pbuild diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/update_npm_tarball.sh new/update_npm_tarball.sh --- old/update_npm_tarball.sh 1970-01-01 01:00:00.000000000 +0100 +++ new/update_npm_tarball.sh 2025-12-02 20:22:20.000000000 +0100 @@ -0,0 +1,13 @@ +#!/bin/bash + +# +# Fetch npm module tarball that is required to run unit tests +# which are not provided by upstream tarball +# +set -e + +tar Jxf node-v*.tar.xz +cd node-v*/tools/doc +npm ci +cd ../.. +exec tar Jcf ../node_modules.tar.xz tools/doc/node_modules ++++++ flaky_test_rerun.patch ++++++ --- /var/tmp/diff_new_pack.LJ5pOF/_old 2025-12-08 17:23:08.094949479 +0100 +++ /var/tmp/diff_new_pack.LJ5pOF/_new 2025-12-08 17:23:08.098949629 +0100 @@ -12,7 +12,7 @@ + result = self.OriginalRun() + if (not result.HasFailed()): + break -+ print("FLAKY TEST rerun: ", self.GetCommand()) ++ print("FLAKY TEST rerun: ", result) + return result + + def OriginalRun(self): ++++++ icu_781.patch ++++++ Index: node-v22.21.1/test/fixtures/icu/localizationData-v78.1.json =================================================================== --- /dev/null +++ node-v22.21.1/test/fixtures/icu/localizationData-v78.1.json @@ -0,0 +1,128 @@ +{ + "dateStrings": { + "en": "Fri Jul 25 1980 01:35:33 GMT+0100 (Central European Standard Time)", + "zh": "Fri Jul 25 1980 01:35:33 GMT+0100 (中欧标准时间)", + "hi": "Fri Jul 25 1980 01:35:33 GMT+0100 (मध्य यूरोपीय मानक समय)", + "es": "Fri Jul 25 1980 01:35:33 GMT+0100 (hora estándar de Europa central)", + "fr": "Fri Jul 25 1980 01:35:33 GMT+0100 (heure normale d’Europe centrale)", + "ar": "Fri Jul 25 1980 01:35:33 GMT+0100 (توقيت وسط أوروبا الرسمي)", + "bn": "Fri Jul 25 1980 01:35:33 GMT+0100 (মধ্য ইউরোপীয় মানক সময়)", + "ru": "Fri Jul 25 1980 01:35:33 GMT+0100 (Центральная Европа, стандартное время)", + "pt": "Fri Jul 25 1980 01:35:33 GMT+0100 (Horário Padrão da Europa Central)", + "ur": "Fri Jul 25 1980 01:35:33 GMT+0100 (وسطی یورپ کا معیاری وقت)", + "id": "Fri Jul 25 1980 01:35:33 GMT+0100 (Waktu Standar Eropa Tengah)", + "de": "Fri Jul 25 1980 01:35:33 GMT+0100 (Mitteleuropäische Normalzeit)", + "ja": "Fri Jul 25 1980 01:35:33 GMT+0100 (中央ヨーロッパ標準時)", + "pcm": "Fri Jul 25 1980 01:35:33 GMT+0100 (Mídúl Yúrop Fíksd Taim)", + "mr": "Fri Jul 25 1980 01:35:33 GMT+0100 (मध्य युरोपियन प्रमाण वेळ)", + "te": "Fri Jul 25 1980 01:35:33 GMT+0100 (సెంట్రల్ యూరోపియన్ ప్రామాణిక సమయం)" + }, + "dateTimeFormats": { + "en": "7/25/1980, 1:35:33 AM", + "zh": "1980/7/25 01:35:33", + "hi": "25/7/1980, 1:35:33 am", + "es": "25/7/1980, 1:35:33", + "fr": "25/07/1980 01:35:33", + "ar": "25/7/1980، 1:35:33 ص", + "bn": "২৫/৭/১৯৮০, ১:৩৫:৩৩ AM", + "ru": "25.07.1980, 01:35:33", + "pt": "25/07/1980, 01:35:33", + "ur": "25/7/1980، 1:35:33 AM", + "id": "25/7/1980, 01.35.33", + "de": "25.7.1980, 01:35:33", + "ja": "1980/7/25 1:35:33", + "pcm": "25/7/1980, 01:35:33", + "mr": "२५/७/१९८०, १:३५:३३ AM", + "te": "25/7/1980 1:35:33 AM" + }, + "dateFormats": { + "en": "7/25/1980", + "zh": "1980/7/25", + "hi": "25/7/1980", + "es": "25/7/1980", + "fr": "25/07/1980", + "ar": "25/7/1980", + "bn": "২৫/৭/১৯৮০", + "ru": "25.07.1980", + "pt": "25/07/1980", + "ur": "25/7/1980", + "id": "25/7/1980", + "de": "25.7.1980", + "ja": "1980/7/25", + "pcm": "25/7/1980", + "mr": "२५/७/१९८०", + "te": "25/7/1980" + }, + "displayNames": { + "en": "Switzerland", + "zh": "瑞士", + "hi": "स्विट्ज़रलैंड", + "es": "Suiza", + "fr": "Suisse", + "ar": "سويسرا", + "bn": "সুইজারল্যান্ড", + "ru": "Швейцария", + "pt": "Suíça", + "ur": "سوئٹزر لینڈ", + "id": "Swiss", + "de": "Schweiz", + "ja": "スイス", + "pcm": "Swítsaland", + "mr": "स्वित्झर्लंड", + "te": "స్విట్జర్లాండ్" + }, + "numberFormats": { + "en": "275,760.913", + "zh": "275,760.913", + "hi": "2,75,760.913", + "es": "275.760,913", + "fr": "275 760,913", + "ar": "275,760.913", + "bn": "২,৭৫,৭৬০.৯১৩", + "ru": "275 760,913", + "pt": "275.760,913", + "ur": "275,760.913", + "id": "275.760,913", + "de": "275.760,913", + "ja": "275,760.913", + "pcm": "275,760.913", + "mr": "२,७५,७६०.९१३", + "te": "2,75,760.913" + }, + "pluralRules": { + "en": "other", + "zh": "other", + "hi": "one", + "es": "other", + "fr": "one", + "ar": "zero", + "bn": "one", + "ru": "many", + "pt": "one", + "ur": "other", + "id": "other", + "de": "other", + "ja": "other", + "pcm": "one", + "mr": "other", + "te": "other" + }, + "relativeTime": { + "en": "586,920.617 hours ago", + "zh": "586,920.617小时前", + "hi": "5,86,920.617 घंटे पहले", + "es": "hace 586.920,617 horas", + "fr": "il y a 586 920,617 heures", + "ar": "قبل 586,920.617 ساعة", + "bn": "৫,৮৬,৯২০.৬১৭ ঘণ্টা আগে", + "ru": "586 920,617 часа назад", + "pt": "há 586.920,617 horas", + "ur": "586,920.617 گھنٹے پہلے", + "id": "586.920,617 jam yang lalu", + "de": "vor 586.920,617 Stunden", + "ja": "586,920.617 時間前", + "pcm": "586,920.617 áwa wé dọ́n pas", + "mr": "५,८६,९२०.६१७ तासांपूर्वी", + "te": "5,86,920.617 గంటల క్రితం" + } +} Index: node-v22.21.1/test/parallel/test-datetime-change-notify.js =================================================================== --- node-v22.21.1.orig/test/parallel/test-datetime-change-notify.js +++ node-v22.21.1/test/parallel/test-datetime-change-notify.js @@ -26,7 +26,7 @@ const cases = [ }, { timeZone: 'Europe/Dublin', - expected: /Irish Standard Time|Greenwich Mean Time/, + expected: /Irish Standard Time|Greenwich Mean Time|GMT\+00:00/, }, ]; ++++++ v8_nameclash.patch ++++++ based on: commit ddfa1b3d9201d319e893b4f5624eab43caae86b0 Author: Nico Hartmann <[email protected]> Date: Fri Aug 8 11:43:12 2025 +0200 [turboshaft] Rename TupleOp to MakeTupleOp to avoid name conflicts Bug: 385155404 Change-Id: I0f8f4667e09afb1f4d122dadc1e3fcab80ba7acb Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/6830052 Commit-Queue: Nico Hartmann <[email protected]> Reviewed-by: Leszek Swirski <[email protected]> Cr-Commit-Position: refs/heads/main@{#101805} Index: node-v24.11.1/deps/v8/src/compiler/backend/instruction-selector.cc =================================================================== --- node-v24.11.1.orig/deps/v8/src/compiler/backend/instruction-selector.cc +++ node-v24.11.1/deps/v8/src/compiler/backend/instruction-selector.cc @@ -378,7 +378,7 @@ OptionalOpIndex InstructionSelectorT::Fi // If the projection has a single use, it is the following tuple, so we // don't return it, since there is no point in emitting it. DCHECK(turboshaft_uses(next).size() == 1 && - graph->Get(turboshaft_uses(next)[0]).Is<TupleOp>()); + graph->Get(turboshaft_uses(next)[0]).Is<MakeTupleOp>()); continue; } if (projection->index == projection_index) return next; @@ -397,7 +397,7 @@ OptionalOpIndex InstructionSelectorT::Fi // (which doesn't count as a regular use since it is just an artifact of // the Turboshaft graph). DCHECK(turboshaft_uses(use).size() == 1 && - graph->Get(turboshaft_uses(use)[0]).Is<TupleOp>()); + graph->Get(turboshaft_uses(use)[0]).Is<MakeTupleOp>()); } } } @@ -2020,7 +2020,7 @@ bool InstructionSelectorT::CanDoBranchIf // If the projection has a single use, it is the following tuple, so we // don't care about the value, and can do branch-if-overflow fusion. DCHECK(turboshaft_uses(projection0_index).size() == 1 && - graph->Get(turboshaft_uses(projection0_index)[0]).Is<TupleOp>()); + graph->Get(turboshaft_uses(projection0_index)[0]).Is<MakeTupleOp>()); return true; } @@ -2035,7 +2035,7 @@ bool InstructionSelectorT::CanDoBranchIf // defined, which will imply that it's fine to define {projection0} and // {binop} now. for (OpIndex use : turboshaft_uses(projection0_index)) { - if (this->Get(use).template Is<TupleOp>()) { + if (this->Get(use).template Is<MakeTupleOp>()) { // The Tuple won't have any uses since it would have to be accessed // through Projections, and Projections on Tuples return the original // Projection instead (see Assembler::ReduceProjection in @@ -2438,9 +2438,9 @@ void InstructionSelectorT::TryPrepareSch // {result} back into it through the back edge. In this case, it's // normal to schedule {result} before the Phi that uses it. for (OpIndex use : turboshaft_uses(result.value())) { - // We ignore TupleOp uses, since TupleOp don't lead to emitted machine + // We ignore MakeTupleOp uses, since MakeTupleOp don't lead to emitted machine // instructions and are just Turboshaft "meta operations". - if (!this->Get(use).template Is<TupleOp>() && !IsDefined(use) && + if (!this->Get(use).template Is<MakeTupleOp>() && !IsDefined(use) && this->block(schedule_, use) == current_block_ && !this->Get(use).template Is<PhiOp>()) { return; @@ -3801,7 +3801,7 @@ void InstructionSelectorT::VisitNode(OpI TURBOSHAFT_WASM_OPERATION_LIST(UNREACHABLE_CASE) TURBOSHAFT_OTHER_OPERATION_LIST(UNREACHABLE_CASE) UNREACHABLE_CASE(PendingLoopPhi) - UNREACHABLE_CASE(Tuple) + UNREACHABLE_CASE(MakeTuple) UNREACHABLE_CASE(Dead) UNREACHABLE(); #undef UNREACHABLE_CASE Index: node-v24.11.1/deps/v8/src/compiler/turboshaft/assembler.h =================================================================== --- node-v24.11.1.orig/deps/v8/src/compiler/turboshaft/assembler.h +++ node-v24.11.1/deps/v8/src/compiler/turboshaft/assembler.h @@ -956,7 +956,7 @@ class EmitProjectionReducer for (int i = 0; i < static_cast<int>(reps.size()); i++) { projections.push_back(Asm().Projection(idx, i, reps[i])); } - return Asm().Tuple(base::VectorOf(projections)); + return Asm().MakeTuple(base::VectorOf(projections)); } return idx; } @@ -4131,22 +4131,22 @@ class TurboshaftAssemblerOpInterface return PendingLoopPhi(first, V<T>::rep); } - V<Any> Tuple(base::Vector<const V<Any>> indices) { - return ReduceIfReachableTuple(indices); + V<Any> MakeTuple(base::Vector<const V<Any>> indices) { + return ReduceIfReachableMakeTuple(indices); } - V<Any> Tuple(std::initializer_list<V<Any>> indices) { - return ReduceIfReachableTuple(base::VectorOf(indices)); + V<Any> MakeTuple(std::initializer_list<V<Any>> indices) { + return ReduceIfReachableMakeTuple(base::VectorOf(indices)); } template <typename... Ts> - V<turboshaft::Tuple<Ts...>> Tuple(V<Ts>... indices) { + V<turboshaft::Tuple<Ts...>> MakeTuple(V<Ts>... indices) { std::initializer_list<V<Any>> inputs{V<Any>::Cast(indices)...}; - return V<turboshaft::Tuple<Ts...>>::Cast(Tuple(base::VectorOf(inputs))); + return V<turboshaft::Tuple<Ts...>>::Cast(MakeTuple(base::VectorOf(inputs))); } // TODO(chromium:331100916): Remove this overload once everything is properly // V<>ified. - V<turboshaft::Tuple<Any, Any>> Tuple(OpIndex left, OpIndex right) { + V<turboshaft::Tuple<Any, Any>> MakeTuple(OpIndex left, OpIndex right) { return V<turboshaft::Tuple<Any, Any>>::Cast( - Tuple(base::VectorOf({V<Any>::Cast(left), V<Any>::Cast(right)}))); + MakeTuple(base::VectorOf({V<Any>::Cast(left), V<Any>::Cast(right)}))); } V<Any> Projection(V<Any> tuple, uint16_t index, RegisterRepresentation rep) { @@ -5401,7 +5401,7 @@ class Assembler : public AssemblerData, // this assumption of the ValueNumberingReducer will break. V<Any> ReduceProjection(V<Any> tuple, uint16_t index, RegisterRepresentation rep) { - if (auto* tuple_op = Asm().matcher().template TryCast<TupleOp>(tuple)) { + if (auto* tuple_op = Asm().matcher().template TryCast<MakeTupleOp>(tuple)) { return tuple_op->input(index); } return Stack::ReduceProjection(tuple, index, rep); Index: node-v24.11.1/deps/v8/src/compiler/turboshaft/copying-phase.h =================================================================== --- node-v24.11.1.orig/deps/v8/src/compiler/turboshaft/copying-phase.h +++ node-v24.11.1/deps/v8/src/compiler/turboshaft/copying-phase.h @@ -689,7 +689,7 @@ class GraphVisitor : public OutputGraphA if (V8_UNLIKELY(v8_flags.turboshaft_verify_reductions)) { if (new_index.valid()) { const Operation& new_op = Asm().output_graph().Get(new_index); - if (!new_op.Is<TupleOp>()) { + if (!new_op.Is<MakeTupleOp>()) { // Checking that the outputs_rep of the new operation are the same as // the old operation. (except for tuples, since they don't have // outputs_rep) Index: node-v24.11.1/deps/v8/src/compiler/turboshaft/fast-api-call-lowering-reducer.h =================================================================== --- node-v24.11.1.orig/deps/v8/src/compiler/turboshaft/fast-api-call-lowering-reducer.h +++ node-v24.11.1/deps/v8/src/compiler/turboshaft/fast-api-call-lowering-reducer.h @@ -137,7 +137,7 @@ class FastApiCallLoweringReducer : publi } BIND(done, state); - return __ Tuple(state, __ GetVariable(result)); + return __ MakeTuple(state, __ GetVariable(result)); } private: Index: node-v24.11.1/deps/v8/src/compiler/turboshaft/graph.h =================================================================== --- node-v24.11.1.orig/deps/v8/src/compiler/turboshaft/graph.h +++ node-v24.11.1/deps/v8/src/compiler/turboshaft/graph.h @@ -1131,7 +1131,8 @@ class Graph { for (OpIndex input : op.inputs()) { // Tuples should never be used as input, except in other tuples (which is // used for instance in Int64Lowering::LowerCall). - DCHECK_IMPLIES(Get(input).Is<TupleOp>(), op.template Is<TupleOp>()); + DCHECK_IMPLIES(Get(input).Is<MakeTupleOp>(), + op.template Is<MakeTupleOp>()); Get(input).saturated_use_count.Incr(); } } @@ -1141,7 +1142,8 @@ class Graph { for (OpIndex input : op.inputs()) { // Tuples should never be used as input, except in other tuples (which is // used for instance in Int64Lowering::LowerCall). - DCHECK_IMPLIES(Get(input).Is<TupleOp>(), op.template Is<TupleOp>()); + DCHECK_IMPLIES(Get(input).Is<MakeTupleOp>(), + op.template Is<MakeTupleOp>()); Get(input).saturated_use_count.Decr(); } } Index: node-v24.11.1/deps/v8/src/compiler/turboshaft/int64-lowering-reducer.h =================================================================== --- node-v24.11.1.orig/deps/v8/src/compiler/turboshaft/int64-lowering-reducer.h +++ node-v24.11.1/deps/v8/src/compiler/turboshaft/int64-lowering-reducer.h @@ -169,7 +169,7 @@ class Int64LoweringReducer : public Next if (kind == ConstantOp::Kind::kWord64) { uint32_t high = value.integral >> 32; uint32_t low = value.integral & std::numeric_limits<uint32_t>::max(); - return __ Tuple(__ Word32Constant(low), __ Word32Constant(high)); + return __ MakeTuple(__ Word32Constant(low), __ Word32Constant(high)); } return Next::ReduceConstant(kind, value); } @@ -192,8 +192,8 @@ class Int64LoweringReducer : public Next int32_t new_index = param_index_map_[parameter_index]; if (rep == RegisterRepresentation::Word64()) { rep = RegisterRepresentation::Word32(); - return __ Tuple(Next::ReduceParameter(new_index, rep), - Next::ReduceParameter(new_index + 1, rep)); + return __ MakeTuple(Next::ReduceParameter(new_index, rep), + Next::ReduceParameter(new_index + 1, rep)); } return Next::ReduceParameter(new_index, rep, debug_name); } @@ -241,7 +241,7 @@ class Int64LoweringReducer : public Next auto [low, high] = Unpack(input_pair); V<Word32> reversed_low = __ Word32ReverseBytes(low); V<Word32> reversed_high = __ Word32ReverseBytes(high); - return __ Tuple(reversed_high, reversed_low); + return __ MakeTuple(reversed_high, reversed_low); } default: FATAL("WordUnaryOp kind %d not supported by int64 lowering", @@ -265,7 +265,7 @@ class Int64LoweringReducer : public Next if (from == word32 && to == word64) { if (kind == Kind::kZeroExtend) { - return __ Tuple(V<Word32>::Cast(input), __ Word32Constant(0)); + return __ MakeTuple(V<Word32>::Cast(input), __ Word32Constant(0)); } if (kind == Kind::kSignExtend) { return LowerSignExtend(input); @@ -273,8 +273,8 @@ class Int64LoweringReducer : public Next } if (from == float64 && to == word64) { if (kind == Kind::kBitcast) { - return __ Tuple(__ Float64ExtractLowWord32(input), - __ Float64ExtractHighWord32(input)); + return __ MakeTuple(__ Float64ExtractLowWord32(input), + __ Float64ExtractHighWord32(input)); } } if (from == word64 && to == float64) { @@ -334,7 +334,7 @@ class Int64LoweringReducer : public Next return __ AtomicWord32PairLoad(base, index, offset); } if (result_rep == RegisterRepresentation::Word64()) { - return __ Tuple( + return __ MakeTuple( __ Load(base, index, kind, loaded_rep, RegisterRepresentation::Word32(), offset, element_scale), __ Word32Constant(0)); @@ -344,7 +344,7 @@ class Int64LoweringReducer : public Next loaded_rep == MemoryRepresentation::Uint64()) { auto [high_index, high_offset] = IncreaseOffset(index, offset, sizeof(int32_t), kind.tagged_base); - return __ Tuple( + return __ MakeTuple( Next::ReduceLoad(base, index, kind, MemoryRepresentation::Int32(), RegisterRepresentation::Word32(), offset, element_scale), @@ -419,7 +419,7 @@ class Int64LoweringReducer : public Next auto [expected_low, expected_high] = Unpack(expected.value()); new_expected = expected_low; } - return __ Tuple(Next::ReduceAtomicRMW( + return __ MakeTuple(Next::ReduceAtomicRMW( base, index, value_low, new_expected, bin_op, RegisterRepresentation::Word32(), memory_rep, kind), __ Word32Constant(0)); @@ -438,8 +438,8 @@ class Int64LoweringReducer : public Next inputs_low.push_back(__ template Projection<0>(input_w32p)); inputs_high.push_back(__ template Projection<1>(input_w32p)); } - return __ Tuple(Next::ReducePhi(base::VectorOf(inputs_low), word32), - Next::ReducePhi(base::VectorOf(inputs_high), word32)); + return __ MakeTuple(Next::ReducePhi(base::VectorOf(inputs_low), word32), + Next::ReducePhi(base::VectorOf(inputs_high), word32)); } return Next::ReducePhi(inputs, rep); } @@ -449,7 +449,7 @@ class Int64LoweringReducer : public Next auto input_w32p = V<Word32Pair>::Cast(input); V<Word32> low = __ PendingLoopPhi(__ template Projection<0>(input_w32p)); V<Word32> high = __ PendingLoopPhi(__ template Projection<1>(input_w32p)); - return __ Tuple(low, high); + return __ MakeTuple(low, high); } return Next::ReducePendingLoopPhi(input, rep); } @@ -457,7 +457,8 @@ class Int64LoweringReducer : public Next void FixLoopPhi(const PhiOp& input_phi, OpIndex output_index, Block* output_graph_loop) { if (input_phi.rep == RegisterRepresentation::Word64()) { - const TupleOp& tuple = __ Get(output_index).template Cast<TupleOp>(); + const MakeTupleOp& tuple = + __ Get(output_index).template Cast<MakeTupleOp>(); DCHECK_EQ(tuple.input_count, 2); OpIndex new_inputs[2] = {__ MapToNewGraph(input_phi.input(0)), __ MapToNewGraph(input_phi.input(1))}; @@ -510,7 +511,7 @@ class Int64LoweringReducer : public Next input, Simd128ExtractLaneOp::Kind::kI32x4, 2 * lane)); V<Word32> high = V<Word32>::Cast(__ Simd128ExtractLane( input, Simd128ExtractLaneOp::Kind::kI32x4, 2 * lane + 1)); - return __ Tuple(low, high); + return __ MakeTuple(low, high); } V<Simd128> REDUCE(Simd128ReplaceLane)(V<Simd128> into, V<Any> new_lane, @@ -595,7 +596,7 @@ class Int64LoweringReducer : public Next private: bool CheckPairOrPairOp(V<Word32Pair> input) { #ifdef DEBUG - if (const TupleOp* tuple = matcher_.TryCast<TupleOp>(input)) { + if (const MakeTupleOp* tuple = matcher_.TryCast<MakeTupleOp>(input)) { DCHECK_EQ(2, tuple->input_count); RegisterRepresentation word32 = RegisterRepresentation::Word32(); ValidateOpInputRep(__ output_graph(), tuple->input(0), word32); @@ -625,7 +626,7 @@ class Int64LoweringReducer : public Next V<Word32Pair> LowerSignExtend(V<Word32> input) { // We use SAR to preserve the sign in the high word. - return __ Tuple(input, __ Word32ShiftRightArithmetic(input, 31)); + return __ MakeTuple(input, __ Word32ShiftRightArithmetic(input, 31)); } V<Word32Pair> LowerClz(V<Word32Pair> input) { @@ -637,7 +638,7 @@ class Int64LoweringReducer : public Next result = __ Word32CountLeadingZeros(high); } - return __ Tuple<Word32, Word32>(result, __ Word32Constant(0)); + return __ template MakeTuple<Word32, Word32>(result, __ Word32Constant(0)); } V<Word32Pair> LowerCtz(V<Word32Pair> input) { @@ -650,13 +651,13 @@ class Int64LoweringReducer : public Next result = __ Word32CountTrailingZeros(low); } - return __ Tuple<Word32, Word32>(result, __ Word32Constant(0)); + return __ template MakeTuple<Word32, Word32>(result, __ Word32Constant(0)); } V<Word32Pair> LowerPopCount(V<Word32Pair> input) { DCHECK(SupportedOperations::word32_popcnt()); auto [low, high] = Unpack(input); - return __ Tuple( + return __ MakeTuple( __ Word32Add(__ Word32PopCount(low), __ Word32PopCount(high)), __ Word32Constant(0)); } @@ -681,7 +682,7 @@ class Int64LoweringReducer : public Next auto [right_low, right_high] = Unpack(right); V<Word32> low_result = __ Word32BitwiseAnd(left_low, right_low); V<Word32> high_result = __ Word32BitwiseAnd(left_high, right_high); - return __ Tuple(low_result, high_result); + return __ MakeTuple(low_result, high_result); } V<Word32Pair> LowerBitwiseOr(V<Word32Pair> left, V<Word32Pair> right) { @@ -689,7 +690,7 @@ class Int64LoweringReducer : public Next auto [right_low, right_high] = Unpack(right); V<Word32> low_result = __ Word32BitwiseOr(left_low, right_low); V<Word32> high_result = __ Word32BitwiseOr(left_high, right_high); - return __ Tuple(low_result, high_result); + return __ MakeTuple(low_result, high_result); } V<Word32Pair> LowerBitwiseXor(V<Word32Pair> left, V<Word32Pair> right) { @@ -697,7 +698,7 @@ class Int64LoweringReducer : public Next auto [right_low, right_high] = Unpack(right); V<Word32> low_result = __ Word32BitwiseXor(left_low, right_low); V<Word32> high_result = __ Word32BitwiseXor(left_high, right_high); - return __ Tuple(low_result, high_result); + return __ MakeTuple(low_result, high_result); } V<Word32Pair> LowerRotateRight(V<Word32Pair> left, V<Word32> right) { @@ -716,7 +717,7 @@ class Int64LoweringReducer : public Next } if (shift_value == 32) { // Swap low and high of left. - return __ Tuple(left_high, left_low); + return __ MakeTuple(left_high, left_low); } V<Word32> low_input = left_high; @@ -736,7 +737,7 @@ class Int64LoweringReducer : public Next V<Word32> high_node = __ Word32BitwiseOr( __ Word32ShiftRightLogical(high_input, masked_shift), __ Word32ShiftLeft(low_input, inv_shift)); - return __ Tuple(low_node, high_node); + return __ MakeTuple(low_node, high_node); } V<Word32> safe_shift = shift; @@ -769,7 +770,7 @@ class Int64LoweringReducer : public Next V<Word32> high_node = __ Word32BitwiseOr(__ Word32BitwiseAnd(rotate_high, bit_mask), __ Word32BitwiseAnd(rotate_low, inv_mask)); - return __ Tuple(low_node, high_node); + return __ MakeTuple(low_node, high_node); } V<Any> LowerCall(V<CallTarget> callee, OptionalV<FrameState> frame_state, @@ -853,7 +854,7 @@ class Int64LoweringReducer : public Next // Example for a call returning [int64, int32]: // In: Call(...) -> [int64, int32] // Out: call = Call() -> [int32, int32, int32] - // Tuple( + // MakeTuple( // Tuple(Projection(call, 0), Projection(call, 1)), // Projection(call, 2)) // @@ -869,8 +870,8 @@ class Int64LoweringReducer : public Next call_descriptor->GetReturnType(i).representation(); if (machine_rep == MachineRepresentation::kWord64) { tuple_inputs.push_back( - __ Tuple(__ Projection(call, projection_index, word32), - __ Projection(call, projection_index + 1, word32))); + __ MakeTuple(__ Projection(call, projection_index, word32), + __ Projection(call, projection_index + 1, word32))); projection_index += 2; } else { tuple_inputs.push_back(__ Projection( @@ -879,7 +880,7 @@ class Int64LoweringReducer : public Next } } DCHECK_EQ(projection_index, return_count + i64_returns); - return __ Tuple(base::VectorOf(tuple_inputs)); + return __ MakeTuple(base::VectorOf(tuple_inputs)); } void InitializeIndexMaps() { Index: node-v24.11.1/deps/v8/src/compiler/turboshaft/machine-optimization-reducer.h =================================================================== --- node-v24.11.1.orig/deps/v8/src/compiler/turboshaft/machine-optimization-reducer.h +++ node-v24.11.1/deps/v8/src/compiler/turboshaft/machine-optimization-reducer.h @@ -1291,7 +1291,8 @@ class MachineOptimizationReducer : publi overflow = base::bits::SignedSubOverflow32(k1, k2, &res); break; } - return __ Tuple(__ Word32Constant(res), __ Word32Constant(overflow)); + return __ MakeTuple(__ Word32Constant(res), + __ Word32Constant(overflow)); } } else { DCHECK_EQ(rep, WordRepresentation::Word64()); @@ -1310,7 +1311,8 @@ class MachineOptimizationReducer : publi overflow = base::bits::SignedSubOverflow64(k1, k2, &res); break; } - return __ Tuple(__ Word64Constant(res), __ Word32Constant(overflow)); + return __ MakeTuple(__ Word64Constant(res), + __ Word32Constant(overflow)); } } @@ -1318,18 +1320,19 @@ class MachineOptimizationReducer : publi // left - 0 => (left, false) if (kind == any_of(Kind::kSignedAdd, Kind::kSignedSub) && matcher_.MatchZero(right)) { - return __ Tuple(left, __ Word32Constant(0)); + return __ MakeTuple(left, __ Word32Constant(0)); } if (kind == Kind::kSignedMul) { if (int64_t k; matcher_.MatchIntegralWordConstant(right, rep, &k)) { // left * 0 => (0, false) if (k == 0) { - return __ Tuple(__ WordConstant(0, rep), __ Word32Constant(false)); + return __ MakeTuple(__ WordConstant(0, rep), + __ Word32Constant(false)); } // left * 1 => (left, false) if (k == 1) { - return __ Tuple(left, __ Word32Constant(false)); + return __ MakeTuple(left, __ Word32Constant(false)); } // left * -1 => 0 - left if (k == -1) { @@ -1349,7 +1352,7 @@ class MachineOptimizationReducer : publi if (V<Word32> x; matcher_.MatchConstantShiftRightArithmeticShiftOutZeros( left, &x, WordRepresentation::Word32(), &amount) && amount == 1) { - return __ Tuple(x, __ Word32Constant(0)); + return __ MakeTuple(x, __ Word32Constant(0)); } } Index: node-v24.11.1/deps/v8/src/compiler/turboshaft/operations.h =================================================================== --- node-v24.11.1.orig/deps/v8/src/compiler/turboshaft/operations.h +++ node-v24.11.1/deps/v8/src/compiler/turboshaft/operations.h @@ -324,7 +324,7 @@ using Variable = SnapshotTable<OpIndex, V(Call) \ V(CatchBlockBegin) \ V(DidntThrow) \ - V(Tuple) \ + V(MakeTuple) \ V(Projection) \ V(DebugBreak) \ V(AssumeMap) \ @@ -4524,8 +4524,8 @@ V8_EXPORT_PRIVATE base::SmallVector<Bloc const Block& block, const Graph& graph); // Tuples are only used to lower operations with multiple outputs. -// `TupleOp` should be folded away by subsequent `ProjectionOp`s. -struct TupleOp : OperationT<TupleOp> { +// `MakeTupleOp` should be folded away by subsequent `ProjectionOp`s. +struct MakeTupleOp : OperationT<MakeTupleOp> { static constexpr OpEffects effects = OpEffects(); base::Vector<const RegisterRepresentation> outputs_rep() const { return {}; } @@ -4534,7 +4534,7 @@ struct TupleOp : OperationT<TupleOp> { return {}; } - explicit TupleOp(base::Vector<const V<Any>> inputs) : Base(inputs) {} + explicit MakeTupleOp(base::Vector<const V<Any>> inputs) : Base(inputs) {} template <typename Fn, typename Mapper> V8_INLINE auto Explode(Fn fn, Mapper& mapper) const { Index: node-v24.11.1/deps/v8/src/compiler/turboshaft/turbolev-graph-builder.cc =================================================================== --- node-v24.11.1.orig/deps/v8/src/compiler/turboshaft/turbolev-graph-builder.cc +++ node-v24.11.1/deps/v8/src/compiler/turboshaft/turbolev-graph-builder.cc @@ -5831,7 +5831,7 @@ class GraphBuildingNodeProcessor { void SetMapMaybeMultiReturn(maglev::NodeBase* node, V<Any> idx) { const Operation& op = __ output_graph().Get(idx); - if (const TupleOp* tuple = op.TryCast<TupleOp>()) { + if (const MakeTupleOp* tuple = op.TryCast<MakeTupleOp>()) { // If the call returned multiple values, then in Maglev, {node} is // used as the 1st returned value, and a GetSecondReturnedValue node is // used to access the 2nd value. We thus call `SetMap` with the 1st Index: node-v24.11.1/deps/v8/src/compiler/turboshaft/type-inference-analysis.h =================================================================== --- node-v24.11.1.orig/deps/v8/src/compiler/turboshaft/type-inference-analysis.h +++ node-v24.11.1/deps/v8/src/compiler/turboshaft/type-inference-analysis.h @@ -158,7 +158,7 @@ class TypeInferenceAnalysis { case Opcode::kRetain: case Opcode::kUnreachable: case Opcode::kSwitch: - case Opcode::kTuple: + case Opcode::kMakeTuple: case Opcode::kStaticAssert: case Opcode::kDebugBreak: case Opcode::kDebugPrint: Index: node-v24.11.1/deps/v8/src/compiler/turboshaft/type-inference-reducer.h =================================================================== --- node-v24.11.1.orig/deps/v8/src/compiler/turboshaft/type-inference-reducer.h +++ node-v24.11.1/deps/v8/src/compiler/turboshaft/type-inference-reducer.h @@ -445,7 +445,7 @@ class TypeInferenceReducer return Type::Invalid(); } - Type GetTupleType(const TupleOp& tuple) { + Type GetTupleType(const MakeTupleOp& tuple) { base::SmallVector<Type, 4> tuple_types; for (OpIndex input : tuple.inputs()) { tuple_types.push_back(GetType(input)); @@ -457,8 +457,8 @@ class TypeInferenceReducer Type type = GetTypeOrInvalid(index); if (type.IsInvalid()) { const Operation& op = Asm().output_graph().Get(index); - if (op.Is<TupleOp>()) { - return GetTupleType(op.Cast<TupleOp>()); + if (op.Is<MakeTupleOp>()) { + return GetTupleType(op.Cast<MakeTupleOp>()); } else { return Typer::TypeForRepresentation(op.outputs_rep(), Asm().graph_zone()); Index: node-v24.11.1/deps/v8/src/compiler/turboshaft/wasm-lowering-reducer.h =================================================================== --- node-v24.11.1.orig/deps/v8/src/compiler/turboshaft/wasm-lowering-reducer.h +++ node-v24.11.1/deps/v8/src/compiler/turboshaft/wasm-lowering-reducer.h @@ -520,7 +520,7 @@ class WasmLoweringReducer : public Next } { BIND(done, base, final_offset, charwidth_shift); - return __ Tuple({base, final_offset, charwidth_shift}); + return __ MakeTuple({base, final_offset, charwidth_shift}); } }
