From 6b6510b5771a6535b6b05e1453d9bab3a05c540a Mon Sep 17 00:00:00 2001 From: Hendiadyoin1 Date: Sun, 11 Sep 2022 12:44:30 +0200 Subject: [PATCH] AK+Tests: Don't double-destroy NoAllocationGuard in TestFixedArray This caused the m_allocation_enabled_previously member to be technically uninitialized when the compiler emits the implicit destructor call for stack allocated classes. This was pointed out by gcc on lagom builds, no clue how this was flying under the radar for so long and is not triggering CI. --- Tests/AK/TestFixedArray.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/Tests/AK/TestFixedArray.cpp b/Tests/AK/TestFixedArray.cpp index fe34a56338..85e878791d 100644 --- a/Tests/AK/TestFixedArray.cpp +++ b/Tests/AK/TestFixedArray.cpp @@ -63,10 +63,15 @@ TEST_CASE(no_allocation) EXPECT_NO_CRASH("Move", [&] { FixedArray moved_from_array = FixedArray::must_create_but_fixme_should_propagate_errors(6); - NoAllocationGuard guard; - FixedArray moved_to_array(move(moved_from_array)); - // We need to ensure that this destructor runs before the FixedArray destructor. - guard.~NoAllocationGuard(); + // We need an Optional here to ensure that the NoAllocationGuard is + // destroyed before the moved_to_array, because that would call free + Optional> moved_to_array; + + { + NoAllocationGuard guard; + moved_to_array.emplace(move(moved_from_array)); + } + return Test::Crash::Failure::DidNotCrash; });