Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 180e5e70 authored by George Burgess IV's avatar George Burgess IV
Browse files

Fix static analyzer warnings

The static analyzer was complaining that we were potentially leaking
memory here (in `ASSERT_NE(ptr, nullptr)` after `new (char)`). This
wasn't correct, but it's also not possible for `new` to return nullptr
without std::nothrow.

In any case, swap to direct calls to `::operator new`, since it looks
like this test explicitly wants calls to `::operator new` to be emitted
(which the C++ standard doesn't guarantee for all `new` expressions).

Bug: 27101951
Test: mma; static analyzer warnings are gone. Also ran
memunreachable_test on marlin; no failures.
Change-Id: Ia740e41079f263040da978ba1ccc71c9c39f53fd
parent cfadedb1
Loading
Loading
Loading
Loading
+9 −8
Original line number Diff line number Diff line
@@ -73,15 +73,18 @@ TEST_F(DisableMallocTest, deadlock_allocate) {
TEST_F(DisableMallocTest, deadlock_new) {
  ASSERT_DEATH(
      {
        char* ptr = new (char);
        // C++ allows `new Foo` to be replaced with a stack allocation or merged
        // with future `new Foo` expressions, provided certain conditions are
        // met [expr.new/10]. None of this applies to `operator new(size_t)`.
        void* ptr = ::operator new(1);
        ASSERT_NE(ptr, nullptr);
        delete (ptr);
        ::operator delete(ptr);
        {
          alarm(100ms);
          ScopedDisableMalloc disable_malloc;
          char* ptr = new (std::nothrow)(char);
          void* ptr = ::operator new(1);
          ASSERT_NE(ptr, nullptr);
          delete (ptr);
          ::operator delete(ptr);
        }
      },
      "");
@@ -90,14 +93,12 @@ TEST_F(DisableMallocTest, deadlock_new) {
TEST_F(DisableMallocTest, deadlock_delete) {
  ASSERT_DEATH(
      {
        char* ptr = new (char);
        void* ptr = ::operator new(1);
        ASSERT_NE(ptr, nullptr);
        {
          alarm(250ms);
          ScopedDisableMalloc disable_malloc;
          delete (ptr);
          // Force ptr usage or this code gets optimized away by the arm64 compiler.
          ASSERT_NE(ptr, nullptr);
          ::operator delete(ptr);
        }
      },
      "");