node
node copied to clipboard
V8 CI build error on ppc
@nodejs/platform-ppc
We missed it in the 12.4 upgrade PR.
https://ci.nodejs.org/job/node-test-commit-v8-linux/5914/nodes=rhel8-ppc64le,v8test=v8test/
21:19:30 FAILED: obj/v8_base_without_compiler/turboshaft-graph-interface.o
21:19:30 ccache g++ -MD -MF obj/v8_base_without_compiler/turboshaft-graph-interface.o.d -DUSE_UDEV -DUSE_AURA=1 -DUSE_GLIB=1 -DUSE_OZONE=1 -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_NONE -D_GLIBCXX_ASSERTIONS=1 -DNDEBUG -DNVALGRIND -DDYNAMIC_ANNOTATIONS_ENABLED=0 -DV8_TYPED_ARRAY_MAX_SIZE_IN_HEAP=64 -DENABLE_GDB_JIT_INTERFACE -DV8_INTL_SUPPORT -DV8_USE_EXTERNAL_STARTUP_DATA -DV8_ATOMIC_OBJECT_FIELD_WRITES -DV8_ENABLE_LAZY_SOURCE_POSITIONS -DV8_SHARED_RO_HEAP -DV8_WIN64_UNWINDING_INFO -DV8_ENABLE_REGEXP_INTERPRETER_THREADED_DISPATCH -DV8_ENABLE_SPARKPLUG -DV8_ENABLE_TURBOFAN -DV8_ENABLE_WEBASSEMBLY -DV8_ENABLE_CONTINUATION_PRESERVED_EMBEDDER_DATA -DV8_ALLOCATION_FOLDING -DV8_ALLOCATION_SITE_TRACKING -DV8_ADVANCED_BIGINT_ALGORITHMS -DV8_USE_ZLIB -DV8_ENABLE_MAGLEV_GRAPH_PRINTER -DV8_ENABLE_EXTENSIBLE_RO_SNAPSHOT -DV8_DEPRECATION_WARNINGS -DV8_IMMINENT_DEPRECATION_WARNINGS -DCPPGC_SLIM_WRITE_BARRIER -DV8_TARGET_ARCH_PPC64 -DV8_TARGET_ARCH_PPC_LE -DV8_HAVE_TARGET_OS -DV8_TARGET_OS_LINUX -DABSL_ALLOCATOR_NOTHROW=1 -DU_USING_ICU_NAMESPACE=0 -DU_ENABLE_DYLOAD=0 -DUSE_CHROMIUM_ICU=1 -DU_ENABLE_TRACING=1 -DU_ENABLE_RESOURCE_TRACING=0 -DU_STATIC_IMPLEMENTATION -DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_FILE -I../.. -Igen -I../../include -I../../third_party/abseil-cpp -Igen/include -I../../third_party/icu/source/common -I../../third_party/icu/source/i18n -I../../third_party/fp16/src/include -I../../third_party/zlib -Wall -Wno-unused-local-typedefs -Wno-maybe-uninitialized -Wno-deprecated-declarations -Wno-comments -Wno-packed-not-aligned -Wno-missing-field-initializers -Wno-unused-parameter -Wno-psabi -Werror -fno-ident -fno-strict-aliasing -fstack-protector -funwind-tables -fPIC -pipe -pthread -m64 -Wno-builtin-macro-redefined -D__DATE__= -D__TIME__= -D__TIMESTAMP__= -fno-omit-frame-pointer -g0 -ffp-contract=off -Wno-invalid-offsetof -Wno-strict-overflow -Wno-return-type -Wno-int-in-bool-context -Wno-deprecated -Wno-stringop-overflow -Wno-stringop-overread -Wno-restrict -Wno-array-bounds -Wno-nonnull -O3 -fdata-sections -ffunction-sections -fno-math-errno -fvisibility=default -Wno-narrowing -Wno-class-memaccess -std=gnu++2a -fno-exceptions -fno-rtti -c ../../src/wasm/turboshaft-graph-interface.cc -o obj/v8_base_without_compiler/turboshaft-graph-interface.o
21:19:30 In file included from ../../src/wasm/turboshaft-graph-interface.h:13,
21:19:30 from ../../src/wasm/turboshaft-graph-interface.cc:5:
21:19:30 ../../src/compiler/turboshaft/assembler.h: In static member function ‘static _Res std::_Function_handler<_Res(_ArgTypes ...), _Functor>::_M_invoke(const std::_Any_data&, _ArgTypes&& ...) [with _Res = v8::internal::compiler::turboshaft::V<v8::internal::compiler::turboshaft::WordWithBits<32> >; _Functor = v8::internal::wasm::TurboshaftGraphBuildingInterface::ArrayFillImpl(v8::internal::wasm::WasmGraphBuilderBase::V<v8::internal::HeapObject>, v8::internal::wasm::WasmGraphBuilderBase::OpIndex, v8::internal::wasm::WasmGraphBuilderBase::OpIndex, v8::internal::wasm::WasmGraphBuilderBase::OpIndex, const v8::internal::wasm::ArrayType*, bool)::<lambda()>; _ArgTypes = {}]’:
21:19:30 ../../src/compiler/turboshaft/assembler.h:680:16: error: ‘<anonymous>’ is used uninitialized in this function [-Werror=uninitialized]
21:19:30 680 | return Get();
21:19:30 | ^
21:19:30 At global scope:
21:19:30 cc1plus: note: unrecognized command-line option ‘-Wno-stringop-overread’ may have been intended to silence earlier diagnostics
21:19:30 cc1plus: all warnings being treated as errors
This doesn't happen on our gcc 12 compilers, i'm assuming you are using 10 for ppc? probably related to this bug: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86465
Yes, we're currently still using gcc-10 and C++17 (-std=gnu++17
. for Node.js). The V8 build is running with -std=gnu++2a
(C++20).
FWIW I've been experimenting with gcc-toolset-12 in richardlau-node-test-commit-v8-linux. The build on main
from yesterday (today's is still in progress) succeeded with gcc 12: https://ci.nodejs.org/job/richardlau-node-test-commit-v8-linux/nodes=rhel8-ppc64le,v8test=v8test/589/
I ran some Node.js builds based on main
(https://github.com/nodejs/node/commit/91dc8c93a3d6ffa9de3bb7b7507e52df4a4aad90) plus commits to use C++20 but these still succeed with gcc-toolset-10:
-
-std=gnu++20
(ref: https://github.com/nodejs/node/pull/45427): https://ci.nodejs.org/job/node-test-commit-plinux/53061/ -
-std=gnu++2a
(same as the V8 CI): https://ci.nodejs.org/job/node-test-commit-plinux/53063/
so there's some other flag difference between the V8 and Node.js builds causing the compilation error to show up in the V8 one but not in the Node.js one when gcc-toolset-10 is used.
Isn't the main difference that V8 builds use Clang?
Isn't the main difference that V8 builds use Clang?
AFAIK not on ppc64le. You can see in the quoted compile failure in https://github.com/nodejs/node/issues/52661#issue-2260548081 that it's executed ccache g++
which would be gcc from the gcc-toolset we select in select-compiler.sh
.
The reason the Node.js V8 CI fails with gcc 10 but the Node.js CI does not is because the V8 build passes -Werror
and -Wall
to enable all warnings (with additional flags to turn some of the warning off) and fail on error while the Node.js build does not. Adding -Wall
or just -Wuninitialized
to the Node.js compile command line flags the same warning, and adding -Werror
causes the build to fail.
This may be related to https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86465. Dropping optimization to a lower level makes the warning go away (i.e. we get the warning with -O3
but not -O2
or -O1
).
@miladfarca has submitted https://crrev.com/c/5503350 upstream which also makes the warning go away. https://ci.nodejs.org/job/node-test-commit-v8-linux/5950/ passed with https://github.com/nodejs/node/commit/2c30d3dfe773b0aa9b6b4b15078582ced0f13ed6.