================ @@ -0,0 +1,161 @@ +//===-- RegisterTypeBuilderClangTest.cpp ----------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#include "Plugins/RegisterTypeBuilder/RegisterTypeBuilderClang.h" +#include "Plugins/Platform/Linux/PlatformLinux.h" +#include "Plugins/TypeSystem/Clang/TypeSystemClang.h" +#include "TestingSupport/SubsystemRAII.h" +#include "TestingSupport/TestUtilities.h" +#include "lldb/Core/Debugger.h" +#include "lldb/Host/FileSystem.h" +#include "lldb/Host/HostInfo.h" +#include "lldb/Utility/ArchSpec.h" +#include "lldb/Utility/RegisterInfo.h" +#include "lldb/Utility/RegisterTypeFlags.h" +#include "gtest/gtest.h" + +#include <mutex> +#include <optional> + +using namespace lldb; +using namespace lldb_private; + +namespace { + +class RegisterTypeBuilderClangTest : public testing::Test { +public: + SubsystemRAII<FileSystem, HostInfo, TypeSystemClang, + platform_linux::PlatformLinux> + subsystems; + +protected: + void SetUp() override { + std::call_once(TestUtilities::g_debugger_initialize_flag, + []() { Debugger::Initialize(nullptr); }); + ArchSpec host_arch("x86_64-pc-linux"); + Platform::SetHostPlatform( + platform_linux::PlatformLinux::CreateInstance(true, &host_arch)); + m_debugger_sp = Debugger::CreateInstance(); + } + + static RegisterInfo MakeRegisterInfo(const RegisterType &type, + uint32_t byte_size) { + RegisterInfo info{}; + info.name = "test"; + info.byte_size = byte_size; + info.register_type = &type; + return info; + } + + DebuggerSP m_debugger_sp; +}; + +TEST_F(RegisterTypeBuilderClangTest, ReusesCachedType) { + Target &target = m_debugger_sp->GetDummyTarget(); + RegisterTypeFlags flags("flags", 4, + {RegisterTypeFlags::Field("field", 0, 31)}); + RegisterInfo info = MakeRegisterInfo(flags, 4); + RegisterTypeBuilderClang builder(target); + + CompilerType first = builder.GetRegisterType(info); + CompilerType second = builder.GetRegisterType(info); + + ASSERT_TRUE(first); + ASSERT_TRUE(second); + EXPECT_EQ(first, second); +} + +TEST_F(RegisterTypeBuilderClangTest, DistinguishesTypesWithTheSameID) { + Target &target = m_debugger_sp->GetDummyTarget(); + RegisterTypeFlags first_flags("flags", 4, ---------------- barsolo2000 wrote:
Done. https://github.com/llvm/llvm-project/pull/215874 _______________________________________________ lldb-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
