From 0cdf0348ec2739b9d8ed96c899d1de35a7058f15 Mon Sep 17 00:00:00 2001 From: Daniel Bevenius Date: Mon, 22 Aug 2022 14:25:29 +0200 Subject: [PATCH] test: fix DebugSymbolsTest.ReqWrapList on PPC64LE Currently, DebugSymbolsTest.ReqWrapList fails on PPC64LE when Node has been configured with Link Time Optimization (LTO) and using RHEL 8.5 and gcc: ```console $ . /opt/rh/gcc-toolset-11/enable $ export CC='ccache gcc' $ export CXX='ccache g++' $ ./configure --enable-lto $ make -j8 cctest ... 21:52:27 [ RUN ] DebugSymbolsTest.ReqWrapList 21:52:27 ../test/cctest/test_node_postmortem_metadata.cc:203: Failure 21:52:27 Expected equality of these values: 21:52:27 expected 21:52:27 Which is: 140736537072320 21:52:27 calculated 21:52:27 Which is: 1099680328560 21:52:27 [ FAILED ] DebugSymbolsTest.ReqWrapList (43 ms) ``` After looking into this is seems that the compiler is tampering with the `last` variable when compiling with LTO enabled. This commit suggests adding volatile to this variable to prevent the compiler from tampering with it. PR-URL: https://github.com/nodejs/node/pull/44341 Reviewed-By: Richard Lau Reviewed-By: James M Snell Reviewed-By: Franziska Hinkelmann --- test/cctest/test_node_postmortem_metadata.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/cctest/test_node_postmortem_metadata.cc b/test/cctest/test_node_postmortem_metadata.cc index d4faec35adf..a6f7b9f3d0e 100644 --- a/test/cctest/test_node_postmortem_metadata.cc +++ b/test/cctest/test_node_postmortem_metadata.cc @@ -195,7 +195,8 @@ TEST_F(DebugSymbolsTest, ReqWrapList) { // ARM64 CI machinies. for (auto it : *(*env)->req_wrap_queue()) (void) ⁢ - auto last = tail + nodedbg_offset_ListNode_ReqWrap__next___uintptr_t; + volatile uintptr_t last = + tail + nodedbg_offset_ListNode_ReqWrap__next___uintptr_t; last = *reinterpret_cast(last); auto expected = reinterpret_cast(&obj);