tests: avoid placement new in test files The prior commit 842113b5349cd8dcb1bdbcc8d2845449ffe8317f replaced placement new calls with std::start_lifetime_as in production code, but the same pattern remained in a number of test files. GCC-16 -Wuninitialized handling of placement new caused these tests to fail at runtime with SIGSEGV, assertion failures, or timeouts. Convert all remaining placement new calls in the test files to std::start_lifetime_as with the same polyfill for GCC-15 compatibility. Signed-off-by: Patrick Williams <patrick@stwcx.xyz> Change-Id: Id2a87647a232b4332fbfead8cf3e49c8995993cc
diff --git a/platform-mc/test/event_manager_test.cpp b/platform-mc/test/event_manager_test.cpp index 790c3c3..e4c6cc0 100644 --- a/platform-mc/test/event_manager_test.cpp +++ b/platform-mc/test/event_manager_test.cpp
@@ -1,3 +1,4 @@ +#include "common/start_lifetime_as.hpp" #include "common/types.hpp" #include "mock_event_manager.hpp" #include "mock_terminus_manager.hpp" @@ -226,7 +227,7 @@ 0x0 // dataTransferHandleTimeout }; auto rc = terminusManager.enqueueResponse( - new (getPDRRepositoryInfoResp.data()) pldm_msg, + std::start_lifetime_as<pldm_msg>(getPDRRepositoryInfoResp.data()), sizeof(getPDRRepositoryInfoResp)); EXPECT_EQ(rc, PLDM_SUCCESS); @@ -300,8 +301,9 @@ 0, // fatalHigh 0 // fatalLow }; - rc = terminusManager.enqueueResponse(new (getPdrResp.data()) pldm_msg, - sizeof(getPdrResp)); + rc = terminusManager.enqueueResponse( + std::start_lifetime_as<pldm_msg>(getPdrResp.data()), + sizeof(getPdrResp)); EXPECT_EQ(rc, PLDM_SUCCESS); const size_t getPdrAuxNameRespLen = 39; @@ -336,7 +338,8 @@ 0x00 // Entity Name "S0" }; rc = terminusManager.enqueueResponse( - new (getPdrAuxNameResp.data()) pldm_msg, sizeof(getPdrAuxNameResp)); + std::start_lifetime_as<pldm_msg>(getPdrAuxNameResp.data()), + sizeof(getPdrAuxNameResp)); EXPECT_EQ(rc, PLDM_SUCCESS); // queue eventMessageBufferSize response(bufferSize=32) @@ -344,7 +347,7 @@ std::array<uint8_t, sizeof(pldm_msg_hdr) + eventMessageBufferSizeRespLen> eventMessageBufferSizeResp{0x0, 0x02, 0x0d, PLDM_SUCCESS, 32, 0}; rc = terminusManager.enqueueResponse( - new (eventMessageBufferSizeResp.data()) pldm_msg, + std::start_lifetime_as<pldm_msg>(eventMessageBufferSizeResp.data()), sizeof(eventMessageBufferSizeResp)); EXPECT_EQ(rc, PLDM_SUCCESS); @@ -358,7 +361,7 @@ 3, // numberEventClassReturned 0x0, 0x5, 0xfa}; rc = terminusManager.enqueueResponse( - new (eventMessageSupportedResp.data()) pldm_msg, + std::start_lifetime_as<pldm_msg>(eventMessageSupportedResp.data()), sizeof(eventMessageSupportedResp)); EXPECT_EQ(rc, PLDM_SUCCESS); @@ -371,7 +374,7 @@ std::array<uint8_t, sizeof(pldm_msg_hdr) + SetEventReceiverLen> SetEventReceiverResp{0x0, 0x02, 0x04, PLDM_SUCCESS}; rc = terminusManager.enqueueResponse( - new (SetEventReceiverResp.data()) pldm_msg, + std::start_lifetime_as<pldm_msg>(SetEventReceiverResp.data()), sizeof(SetEventReceiverResp)); EXPECT_EQ(rc, PLDM_SUCCESS); @@ -439,7 +442,8 @@ 4 // eventData first part }; auto rc = terminusManager.enqueueResponse( - new (pollForPlatformEventMessage1Resp.data()) pldm_msg, + std::start_lifetime_as<pldm_msg>( + pollForPlatformEventMessage1Resp.data()), sizeof(pollForPlatformEventMessage1Resp)); EXPECT_EQ(rc, PLDM_SUCCESS); @@ -476,7 +480,8 @@ 0x5d // crc32 }; rc = terminusManager.enqueueResponse( - new (pollForPlatformEventMessage2Resp.data()) pldm_msg, + std::start_lifetime_as<pldm_msg>( + pollForPlatformEventMessage2Resp.data()), sizeof(pollForPlatformEventMessage2Resp)); EXPECT_EQ(rc, PLDM_SUCCESS); @@ -489,7 +494,8 @@ 0x0, 0x0 // eventID }; rc = terminusManager.enqueueResponse( - new (pollForPlatformEventMessage3Resp.data()) pldm_msg, + std::start_lifetime_as<pldm_msg>( + pollForPlatformEventMessage3Resp.data()), sizeof(pollForPlatformEventMessage3Resp)); EXPECT_EQ(rc, PLDM_SUCCESS);
diff --git a/platform-mc/test/platform_manager_test.cpp b/platform-mc/test/platform_manager_test.cpp index aaa808a..76a4f27 100644 --- a/platform-mc/test/platform_manager_test.cpp +++ b/platform-mc/test/platform_manager_test.cpp
@@ -1,3 +1,4 @@ +#include "common/start_lifetime_as.hpp" #include "mock_terminus_manager.hpp" #include "platform-mc/platform_manager.hpp" #include "test/test_instance_id.hpp" @@ -68,7 +69,7 @@ 0x0 // dataTransferHandleTimeout }; auto rc = mockTerminusManager.enqueueResponse( - new (getPDRRepositoryInfoResp.data()) pldm_msg, + std::start_lifetime_as<pldm_msg>(getPDRRepositoryInfoResp.data()), sizeof(getPDRRepositoryInfoResp)); EXPECT_EQ(rc, PLDM_SUCCESS); @@ -142,8 +143,9 @@ 0, // fatalHigh 0 // fatalLow }; - rc = mockTerminusManager.enqueueResponse(new (getPdrResp.data()) pldm_msg, - sizeof(getPdrResp)); + rc = mockTerminusManager.enqueueResponse( + std::start_lifetime_as<pldm_msg>(getPdrResp.data()), + sizeof(getPdrResp)); EXPECT_EQ(rc, PLDM_SUCCESS); const size_t getPdrAuxNameRespLen = 39; @@ -178,7 +180,8 @@ 0x00 // Entity Name "S0" }; rc = mockTerminusManager.enqueueResponse( - new (getPdrAuxNameResp.data()) pldm_msg, sizeof(getPdrAuxNameResp)); + std::start_lifetime_as<pldm_msg>(getPdrAuxNameResp.data()), + sizeof(getPdrAuxNameResp)); EXPECT_EQ(rc, PLDM_SUCCESS); mockTerminusManager.updateMctpEndpointAvailability( @@ -234,7 +237,7 @@ 0x0 // dataTransferHandleTimeout }; auto rc = mockTerminusManager.enqueueResponse( - new (getPDRRepositoryInfoResp.data()) pldm_msg, + std::start_lifetime_as<pldm_msg>(getPDRRepositoryInfoResp.data()), sizeof(getPDRRepositoryInfoResp)); EXPECT_EQ(rc, PLDM_SUCCESS); @@ -308,8 +311,9 @@ 0, // fatalHigh 0 // fatalLow }; - rc = mockTerminusManager.enqueueResponse(new (getPdrResp.data()) pldm_msg, - sizeof(getPdrResp)); + rc = mockTerminusManager.enqueueResponse( + std::start_lifetime_as<pldm_msg>(getPdrResp.data()), + sizeof(getPdrResp)); EXPECT_EQ(rc, PLDM_SUCCESS); const size_t getPdrAuxNameRespLen = 39; @@ -344,7 +348,8 @@ 0x00 // Entity Name "S0" }; rc = mockTerminusManager.enqueueResponse( - new (getPdrAuxNameResp.data()) pldm_msg, sizeof(getPdrAuxNameResp)); + std::start_lifetime_as<pldm_msg>(getPdrAuxNameResp.data()), + sizeof(getPdrAuxNameResp)); EXPECT_EQ(rc, PLDM_SUCCESS); mockTerminusManager.updateMctpEndpointAvailability( @@ -392,7 +397,7 @@ 0x0 // dataTransferHandleTimeout }; auto rc = mockTerminusManager.enqueueResponse( - new (getPDRRepositoryInfoResp.data()) pldm_msg, + std::start_lifetime_as<pldm_msg>(getPDRRepositoryInfoResp.data()), sizeof(getPDRRepositoryInfoResp)); EXPECT_EQ(rc, PLDM_SUCCESS); @@ -466,8 +471,9 @@ 0, // fatalHigh 0 // fatalLow }; - rc = mockTerminusManager.enqueueResponse(new (getPdrResp.data()) pldm_msg, - sizeof(getPdrResp)); + rc = mockTerminusManager.enqueueResponse( + std::start_lifetime_as<pldm_msg>(getPdrResp.data()), + sizeof(getPdrResp)); EXPECT_EQ(rc, PLDM_SUCCESS); stdexec::sync_wait(platformManager.initTerminus()); @@ -509,7 +515,7 @@ std::array<uint8_t, sizeof(pldm_msg_hdr) + getPDRRepositoryInfoLen> getPDRRepositoryInfoResp{0x0, 0x02, 0x50, PLDM_ERROR}; auto rc = mockTerminusManager.enqueueResponse( - new (getPDRRepositoryInfoResp.data()) pldm_msg, + std::start_lifetime_as<pldm_msg>(getPDRRepositoryInfoResp.data()), sizeof(getPDRRepositoryInfoResp)); EXPECT_EQ(rc, PLDM_SUCCESS); @@ -517,8 +523,9 @@ const size_t getPdrRespLen = 1; std::array<uint8_t, sizeof(pldm_msg_hdr) + getPdrRespLen> getPdrResp{ 0x0, 0x02, 0x51, PLDM_ERROR}; - rc = mockTerminusManager.enqueueResponse(new (getPdrResp.data()) pldm_msg, - sizeof(getPdrResp)); + rc = mockTerminusManager.enqueueResponse( + std::start_lifetime_as<pldm_msg>(getPdrResp.data()), + sizeof(getPdrResp)); EXPECT_EQ(rc, PLDM_SUCCESS); stdexec::sync_wait(platformManager.initTerminus());
diff --git a/platform-mc/test/terminus_manager_test.cpp b/platform-mc/test/terminus_manager_test.cpp index 9bee4b9..3b0173d 100644 --- a/platform-mc/test/terminus_manager_test.cpp +++ b/platform-mc/test/terminus_manager_test.cpp
@@ -1,3 +1,4 @@ +#include "common/start_lifetime_as.hpp" #include "common/types.hpp" #include "mock_terminus_manager.hpp" #include "platform-mc/platform_manager.hpp" @@ -140,19 +141,22 @@ std::array<uint8_t, sizeof(pldm_msg_hdr) + getTidRespLen> getTidResp0{ 0x00, 0x02, 0x02, 0x00, 0x00}; - rc = mockTerminusManager.enqueueResponse(new (getTidResp0.data()) pldm_msg, - sizeof(getTidResp0)); + rc = mockTerminusManager.enqueueResponse( + std::start_lifetime_as<pldm_msg>(getTidResp0.data()), + sizeof(getTidResp0)); EXPECT_EQ(rc, PLDM_SUCCESS); std::array<uint8_t, sizeof(pldm_msg_hdr) + setTidRespLen> setTidResp0{ 0x00, 0x02, 0x01, 0x00}; - rc = mockTerminusManager.enqueueResponse(new (setTidResp0.data()) pldm_msg, - sizeof(setTidResp0)); + rc = mockTerminusManager.enqueueResponse( + std::start_lifetime_as<pldm_msg>(setTidResp0.data()), + sizeof(setTidResp0)); EXPECT_EQ(rc, PLDM_SUCCESS); std::array<uint8_t, sizeof(pldm_msg_hdr) + getPldmTypesRespLen> getPldmTypesResp0{0x00, 0x02, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; rc = mockTerminusManager.enqueueResponse( - new (getPldmTypesResp0.data()) pldm_msg, sizeof(getPldmTypesResp0)); + std::start_lifetime_as<pldm_msg>(getPldmTypesResp0.data()), + sizeof(getPldmTypesResp0)); EXPECT_EQ(rc, PLDM_SUCCESS); pldm::MctpInfos mctpInfos{}; @@ -166,14 +170,17 @@ std::array<uint8_t, sizeof(pldm_msg_hdr) + getTidRespLen> getTidResp1{ 0x00, 0x02, 0x02, 0x00, 0x01}; - rc = mockTerminusManager.enqueueResponse(new (getTidResp1.data()) pldm_msg, - sizeof(getTidResp1)); - EXPECT_EQ(rc, PLDM_SUCCESS); - rc = mockTerminusManager.enqueueResponse(new (setTidResp0.data()) pldm_msg, - sizeof(setTidResp0)); + rc = mockTerminusManager.enqueueResponse( + std::start_lifetime_as<pldm_msg>(getTidResp1.data()), + sizeof(getTidResp1)); EXPECT_EQ(rc, PLDM_SUCCESS); rc = mockTerminusManager.enqueueResponse( - new (getPldmTypesResp0.data()) pldm_msg, sizeof(getPldmTypesResp0)); + std::start_lifetime_as<pldm_msg>(setTidResp0.data()), + sizeof(setTidResp0)); + EXPECT_EQ(rc, PLDM_SUCCESS); + rc = mockTerminusManager.enqueueResponse( + std::start_lifetime_as<pldm_msg>(getPldmTypesResp0.data()), + sizeof(getPldmTypesResp0)); EXPECT_EQ(rc, PLDM_SUCCESS); mockTerminusManager.discoverMctpTerminus(mctpInfos); @@ -197,7 +204,8 @@ std::array<uint8_t, sizeof(pldm_msg_hdr) + getTidRespLen> getTidResp0{ 0x00, 0x02, 0x02, 0x00, PLDM_TID_RESERVED}; auto rc = mockTerminusManager.enqueueResponse( - new (getTidResp0.data()) pldm_msg, sizeof(getTidResp0)); + std::start_lifetime_as<pldm_msg>(getTidResp0.data()), + sizeof(getTidResp0)); EXPECT_EQ(rc, PLDM_SUCCESS); pldm::MctpInfos mctpInfos{}; @@ -211,11 +219,13 @@ std::array<uint8_t, sizeof(pldm_msg_hdr) + setTidRespLen> setTidResp1{ 0x00, 0x02, 0x01, PLDM_ERROR}; - rc = mockTerminusManager.enqueueResponse(new (getTidResp1.data()) pldm_msg, - sizeof(getTidResp1)); + rc = mockTerminusManager.enqueueResponse( + std::start_lifetime_as<pldm_msg>(getTidResp1.data()), + sizeof(getTidResp1)); EXPECT_EQ(rc, PLDM_SUCCESS); - rc = mockTerminusManager.enqueueResponse(new (setTidResp1.data()) pldm_msg, - sizeof(setTidResp1)); + rc = mockTerminusManager.enqueueResponse( + std::start_lifetime_as<pldm_msg>(setTidResp1.data()), + sizeof(setTidResp1)); EXPECT_EQ(rc, PLDM_SUCCESS); mockTerminusManager.removeMctpTerminus(mctpInfos); EXPECT_EQ(0, termini.size()); @@ -229,15 +239,18 @@ std::array<uint8_t, sizeof(pldm_msg_hdr) + getPldmTypesRespLen> getPldmTypesResp2{0x00, 0x02, 0x04, PLDM_ERROR, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; - rc = mockTerminusManager.enqueueResponse(new (getTidResp2.data()) pldm_msg, - sizeof(getTidResp2)); + rc = mockTerminusManager.enqueueResponse( + std::start_lifetime_as<pldm_msg>(getTidResp2.data()), + sizeof(getTidResp2)); EXPECT_EQ(rc, PLDM_SUCCESS); - rc = mockTerminusManager.enqueueResponse(new (setTidResp2.data()) pldm_msg, - sizeof(setTidResp2)); + rc = mockTerminusManager.enqueueResponse( + std::start_lifetime_as<pldm_msg>(setTidResp2.data()), + sizeof(setTidResp2)); EXPECT_EQ(rc, PLDM_SUCCESS); rc = mockTerminusManager.enqueueResponse( - new (getPldmTypesResp2.data()) pldm_msg, sizeof(getPldmTypesResp2)); + std::start_lifetime_as<pldm_msg>(getPldmTypesResp2.data()), + sizeof(getPldmTypesResp2)); EXPECT_EQ(rc, PLDM_SUCCESS); mockTerminusManager.removeMctpTerminus(mctpInfos); EXPECT_EQ(0, termini.size()); @@ -255,14 +268,16 @@ std::array<uint8_t, sizeof(pldm_msg_hdr) + getTidRespLen> getTidResp0{ 0x00, 0x02, 0x02, 0x00, 0x00}; - rc = mockTerminusManager.enqueueResponse(new (getTidResp0.data()) pldm_msg, - sizeof(getTidResp0)); + rc = mockTerminusManager.enqueueResponse( + std::start_lifetime_as<pldm_msg>(getTidResp0.data()), + sizeof(getTidResp0)); EXPECT_EQ(rc, PLDM_SUCCESS); std::array<uint8_t, sizeof(pldm_msg_hdr) + setTidRespLen> setTidResp0{ 0x00, 0x02, 0x01, 0x00}; - rc = mockTerminusManager.enqueueResponse(new (setTidResp0.data()) pldm_msg, - sizeof(setTidResp0)); + rc = mockTerminusManager.enqueueResponse( + std::start_lifetime_as<pldm_msg>(setTidResp0.data()), + sizeof(setTidResp0)); EXPECT_EQ(rc, PLDM_SUCCESS); uint8_t supportedType1Byte = @@ -273,7 +288,8 @@ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; rc = mockTerminusManager.enqueueResponse( - new (getPldmTypesResp0.data()) pldm_msg, sizeof(getPldmTypesResp0)); + std::start_lifetime_as<pldm_msg>(getPldmTypesResp0.data()), + sizeof(getPldmTypesResp0)); EXPECT_EQ(rc, PLDM_SUCCESS); pldm::MctpInfos mctpInfos{}; @@ -309,14 +325,16 @@ std::array<uint8_t, sizeof(pldm_msg_hdr) + getTidRespLen> getTidResp0{ 0x00, 0x02, 0x02, 0x00, 0x00}; - rc = mockTerminusManager.enqueueResponse(new (getTidResp0.data()) pldm_msg, - sizeof(getTidResp0)); + rc = mockTerminusManager.enqueueResponse( + std::start_lifetime_as<pldm_msg>(getTidResp0.data()), + sizeof(getTidResp0)); EXPECT_EQ(rc, PLDM_SUCCESS); std::array<uint8_t, sizeof(pldm_msg_hdr) + setTidRespLen> setTidResp0{ 0x00, 0x02, 0x01, 0x00}; - rc = mockTerminusManager.enqueueResponse(new (setTidResp0.data()) pldm_msg, - sizeof(setTidResp0)); + rc = mockTerminusManager.enqueueResponse( + std::start_lifetime_as<pldm_msg>(setTidResp0.data()), + sizeof(setTidResp0)); EXPECT_EQ(rc, PLDM_SUCCESS); uint8_t byte0 = (1 << (PLDM_BASE % 8)) + (1 << (PLDM_PLATFORM % 8)) + @@ -325,7 +343,8 @@ getPldmTypesResp0{0x00, 0x02, 0x04, 0x00, byte0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; rc = mockTerminusManager.enqueueResponse( - new (getPldmTypesResp0.data()) pldm_msg, sizeof(getPldmTypesResp0)); + std::start_lifetime_as<pldm_msg>(getPldmTypesResp0.data()), + sizeof(getPldmTypesResp0)); EXPECT_EQ(rc, PLDM_SUCCESS); /* Response GetPLDMVersion BASE, CC=0 */ @@ -351,7 +370,7 @@ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; rc = mockTerminusManager.enqueueResponse( - new (getPldmCommandBaseResp0.data()) pldm_msg, + std::start_lifetime_as<pldm_msg>(getPldmCommandBaseResp0.data()), sizeof(getPldmCommandBaseResp0)); EXPECT_EQ(rc, PLDM_SUCCESS); @@ -399,7 +418,7 @@ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; rc = mockTerminusManager.enqueueResponse( - new (getPldmCommandPlatResp0.data()) pldm_msg, + std::start_lifetime_as<pldm_msg>(getPldmCommandPlatResp0.data()), sizeof(getPldmCommandPlatResp0)); EXPECT_EQ(rc, PLDM_SUCCESS); @@ -428,7 +447,7 @@ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; rc = mockTerminusManager.enqueueResponse( - new (getPldmCommandBiosResp0.data()) pldm_msg, + std::start_lifetime_as<pldm_msg>(getPldmCommandBiosResp0.data()), sizeof(getPldmCommandBiosResp0)); EXPECT_EQ(rc, PLDM_SUCCESS); @@ -458,7 +477,7 @@ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; rc = mockTerminusManager.enqueueResponse( - new (getPldmCommandFruResp0.data()) pldm_msg, + std::start_lifetime_as<pldm_msg>(getPldmCommandFruResp0.data()), sizeof(getPldmCommandFruResp0)); EXPECT_EQ(rc, PLDM_SUCCESS);
diff --git a/requester/test/handler_test.cpp b/requester/test/handler_test.cpp index 0450065..1a86e50 100644 --- a/requester/test/handler_test.cpp +++ b/requester/test/handler_test.cpp
@@ -191,7 +191,7 @@ size_t responseLen = 0; int rc = PLDM_SUCCESS; - auto requestPtr = new (request.data()) pldm_msg; + auto requestPtr = std::start_lifetime_as<pldm_msg>(request.data()); requestPtr->hdr.instance_id = instanceId; try @@ -239,7 +239,7 @@ pldm::Request request(sizeof(pldm_msg_hdr) + sizeof(uint8_t), 0); pldm::Response response; - auto requestPtr = new (request.data()) pldm_msg; + auto requestPtr = std::start_lifetime_as<pldm_msg>(request.data()); requestPtr->hdr.instance_id = instanceId; co_await reqHandler.sendRecvMsg(eid, std::move(request)); @@ -307,7 +307,8 @@ pldm::Response mockResponse( sizeof(pldm_msg_hdr) + PLDM_BASE_GET_TID_RESP_BYTES, 0); - auto mockResponseMsg = new (mockResponse.data()) pldm_msg; + auto mockResponseMsg = + std::start_lifetime_as<pldm_msg>(mockResponse.data()); // Compose response message of getTID command pldm_base_get_tid_resp resp{PLDM_SUCCESS, expectedTid};