https://github.com/Teemperor created https://github.com/llvm/llvm-project/pull/220201
Reverts llvm/llvm-project#219428 This was merged by accident and the parent PR should have been merged. >From c0c24bfc46c1bb63e64fec8405ce39e58b2880d7 Mon Sep 17 00:00:00 2001 From: Raphael Isemann <[email protected]> Date: Tue, 1 Sep 2026 10:18:22 +0100 Subject: [PATCH] Revert "[lldb] Use Guarded in CPPLanguageRuntime (#219428)" This reverts commit 579d7295a9ca6e16d7d1019f7c56387f0e36095a. --- lldb/include/lldb/Utility/Locked.h | 28 -------------- .../CPlusPlus/CPPLanguageRuntime.cpp | 9 +++-- .../CPlusPlus/CPPLanguageRuntime.h | 5 +-- lldb/unittests/Utility/LockedTest.cpp | 37 ------------------- 4 files changed, 7 insertions(+), 72 deletions(-) diff --git a/lldb/include/lldb/Utility/Locked.h b/lldb/include/lldb/Utility/Locked.h index f5d7b1aa8e4d9..acd34e454a918 100644 --- a/lldb/include/lldb/Utility/Locked.h +++ b/lldb/include/lldb/Utility/Locked.h @@ -168,34 +168,6 @@ template <typename T, typename Mutex = llvm::sys::RWMutex> using SharedLockedUP = SharedLocked<std::unique_ptr<const T>, Mutex>; /// @} -/// Bundles a value of type `T` with the `Mutex` that guards it. -/// -/// This class prevents accidential use of a value without aquiring the -/// lock and should be preferred over a member + mutex pair. -/// -/// `Mutex` must satisfy `Lockable` when calling `Lock()` and `SharedLockable` -/// when calling `LockShared()`. -template <typename T, typename Mutex = llvm::sys::RWMutex> class Guarded { -public: - Guarded() = default; - explicit Guarded(T value) : m_value(std::move(value)) {} - - Guarded(const Guarded &) = delete; - Guarded &operator=(const Guarded &) = delete; - - /// Exclusive (read/write) access to the value. - Locked<T *, Mutex> Lock() { return Locked<T *, Mutex>(m_mutex, &m_value); } - - /// Shared (read-only) access to the value. - SharedLocked<const T *, Mutex> LockShared() const { - return SharedLocked<const T *, Mutex>(m_mutex, &m_value); - } - -private: - mutable Mutex m_mutex; - T m_value{}; -}; - } // namespace lldb_private #endif // LLDB_UTILITY_LOCKED_H diff --git a/lldb/source/Plugins/LanguageRuntime/CPlusPlus/CPPLanguageRuntime.cpp b/lldb/source/Plugins/LanguageRuntime/CPlusPlus/CPPLanguageRuntime.cpp index 27aa2ce07a374..e562266e80d23 100644 --- a/lldb/source/Plugins/LanguageRuntime/CPlusPlus/CPPLanguageRuntime.cpp +++ b/lldb/source/Plugins/LanguageRuntime/CPlusPlus/CPPLanguageRuntime.cpp @@ -806,9 +806,9 @@ CPPLanguageRuntime::GetVTableInfoEntry(ValueObject &in_value, bool check_type) { // Check our cache first to see if we already have this info { - auto vtable_info_map = m_vtable_info_map.Lock(); - auto pos = vtable_info_map->find(vtable_addr); - if (pos != vtable_info_map->end()) + std::lock_guard<std::mutex> locker(m_vtable_mutex); + auto pos = m_vtable_info_map.find(vtable_addr); + if (pos != m_vtable_info_map.end()) return pos->second; } @@ -830,7 +830,8 @@ CPPLanguageRuntime::GetVTableInfoEntry(ValueObject &in_value, bool check_type) { /*info=*/VTableInfo{vtable_addr, symbol}, /*runtime=*/runtime.get(), }; - (*m_vtable_info_map.Lock())[vtable_addr] = entry; + std::lock_guard<std::mutex> locker(m_vtable_mutex); + m_vtable_info_map[vtable_addr] = entry; return entry; } } diff --git a/lldb/source/Plugins/LanguageRuntime/CPlusPlus/CPPLanguageRuntime.h b/lldb/source/Plugins/LanguageRuntime/CPlusPlus/CPPLanguageRuntime.h index 5bc21448ce306..823a968cbad8c 100644 --- a/lldb/source/Plugins/LanguageRuntime/CPlusPlus/CPPLanguageRuntime.h +++ b/lldb/source/Plugins/LanguageRuntime/CPlusPlus/CPPLanguageRuntime.h @@ -16,7 +16,6 @@ #include "CommonABIRuntime.h" #include "lldb/Core/PluginInterface.h" #include "lldb/Target/LanguageRuntime.h" -#include "lldb/Utility/Locked.h" #include "lldb/lldb-private.h" namespace lldb_private { @@ -154,8 +153,8 @@ class CPPLanguageRuntime : public LanguageRuntime { llvm::Expected<VTableInfoEntry> GetVTableInfoEntry(ValueObject &in_value, bool check_type); - using VTableInfoMap = std::map<Address, VTableInfoEntry>; - Guarded<VTableInfoMap, std::mutex> m_vtable_info_map; + std::map<Address, VTableInfoEntry> m_vtable_info_map; + std::mutex m_vtable_mutex; }; } // namespace lldb_private diff --git a/lldb/unittests/Utility/LockedTest.cpp b/lldb/unittests/Utility/LockedTest.cpp index f898f21b56291..cae24293dee2e 100644 --- a/lldb/unittests/Utility/LockedTest.cpp +++ b/lldb/unittests/Utility/LockedTest.cpp @@ -225,40 +225,3 @@ TEST(LockedTest, ExclusiveAccessOnRWMutex) { writer->value = 11; EXPECT_EQ(widget.value, 11); } - -// Guarded is neither copyable nor movable. -static_assert(!std::is_copy_constructible_v<Guarded<Widget>>); -static_assert(!std::is_move_constructible_v<Guarded<Widget>>); - -TEST(LockedTest, GuardedDefaultConstructed) { - Guarded<Widget> guarded; - EXPECT_EQ(guarded.Lock()->value, 0); -} - -TEST(LockedTest, GuardedValueConstructed) { - Guarded<Widget> guarded(Widget{42}); - EXPECT_EQ(guarded.Lock()->value, 42); -} - -TEST(LockedTest, GuardedExclusiveAccessMutatesValue) { - Guarded<Widget> guarded; - guarded.Lock()->value = 7; - EXPECT_EQ(guarded.Lock()->value, 7); -} - -TEST(LockedTest, GuardedSharedAccessIsReadOnly) { - Guarded<Widget> guarded(Widget{5}); - SharedLocked<const Widget *, llvm::sys::RWMutex> reader = - guarded.LockShared(); - EXPECT_EQ(reader->value, 5); - static_assert(std::is_same_v<decltype(reader.get()), const Widget *>, - "shared access borrows a const-qualified pointer"); -} - -// std::shared_mutex satisfies SharedLockable too, so Guarded works with it -// as a drop-in replacement for llvm::sys::RWMutex. -TEST(LockedTest, GuardedWorksWithStdSharedMutex) { - Guarded<Widget, std::shared_mutex> guarded; - guarded.Lock()->value = 3; - EXPECT_EQ(guarded.LockShared()->value, 3); -} _______________________________________________ lldb-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
