diff --git a/libutils/RefBase.cpp b/libutils/RefBase.cpp index 5199ef60e..3a11547a0 100644 --- a/libutils/RefBase.cpp +++ b/libutils/RefBase.cpp @@ -149,8 +149,8 @@ namespace android { // Same for weak counts. #define BAD_WEAK(c) ((c) == 0 || ((c) & (~MAX_COUNT)) != 0) -// see utils/StrongPointer.h - declared there for legacy reasons -void sp_report_stack_pointer(); +// name kept because prebuilts used to use it from inlining sp<> code +void sp_report_stack_pointer() { LOG_ALWAYS_FATAL("RefBase used with stack pointer argument"); } // Check whether address is definitely on the calling stack. We actually check whether it is on // the same 4K page as the frame pointer. diff --git a/libutils/RefBase_test.cpp b/libutils/RefBase_test.cpp index b89779de6..aed3b9b40 100644 --- a/libutils/RefBase_test.cpp +++ b/libutils/RefBase_test.cpp @@ -275,6 +275,11 @@ TEST(RefBase, DoubleOwnershipDeath) { EXPECT_FALSE(isDeleted); } +TEST(RefBase, StackOwnershipDeath) { + bool isDeleted; + EXPECT_DEATH({ Foo foo(&isDeleted); foo.incStrong(nullptr); }, ""); +} + // Set up a situation in which we race with visit2AndRremove() to delete // 2 strong references. Bar destructor checks that there are no early // deletions and prior updates are visible to destructor. diff --git a/libutils/StrongPointer.cpp b/libutils/StrongPointer.cpp index ef467238a..ba52502ec 100644 --- a/libutils/StrongPointer.cpp +++ b/libutils/StrongPointer.cpp @@ -21,7 +21,4 @@ namespace android { void sp_report_race() { LOG_ALWAYS_FATAL("sp<> assignment detected data race"); } - -void sp_report_stack_pointer() { LOG_ALWAYS_FATAL("sp<> constructed with stack pointer argument"); } - } diff --git a/libutils/include/utils/StrongPointer.h b/libutils/include/utils/StrongPointer.h index cbdcb5b02..54aa691e0 100644 --- a/libutils/include/utils/StrongPointer.h +++ b/libutils/include/utils/StrongPointer.h @@ -184,7 +184,6 @@ COMPARE_STRONG_FUNCTIONAL(>=, std::greater_equal) // For code size reasons, we do not want these inlined or templated. void sp_report_race(); -void sp_report_stack_pointer(); // --------------------------------------------------------------------------- // No user serviceable parts below here.