https://github.com/sedymrak created https://github.com/llvm/llvm-project/pull/165857
When trying to get the `SBType` object corresponding to the `_BitInt(...)` type name, we have noticed that the `SBTarget::FindFirstType` metod returns `nil`. This branch proposes: - some test that demonstrate that the problem exists - a possible fix From f9750d0fedc41532ffe7d5048c419cb91d223601 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Ko=C5=A1=C3=ADk?= <[email protected]> Date: Fri, 31 Oct 2025 10:37:26 +0100 Subject: [PATCH 1/3] [lldb] add more tests --- .../sbtype_basic_type/TestSBTypeBasicType.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/lldb/test/API/python_api/sbtype_basic_type/TestSBTypeBasicType.py b/lldb/test/API/python_api/sbtype_basic_type/TestSBTypeBasicType.py index f8594dfc6b78d..99617cc68d19f 100644 --- a/lldb/test/API/python_api/sbtype_basic_type/TestSBTypeBasicType.py +++ b/lldb/test/API/python_api/sbtype_basic_type/TestSBTypeBasicType.py @@ -36,3 +36,17 @@ def test(self): # Check the size of the chosen aliases of basic types. self.assertEqual(self.target().FindFirstType("__int128_t").size, 16) self.assertEqual(self.target().FindFirstType("__uint128_t").size, 16) + + # "_BitInt(...)" and "unsigned _BitInt(...)" are GNU C compiler extensions + # that are supported by LLVM C(++) compiler as well. + # + # We check that LLDB is able to map the names of these types + # (as reported by LLDB for variables of this type) + # to the corresponding SBType objects. + self.assertEqual(self.target().FindFirstType("_BitInt(65)").name, "_BitInt(65)") + self.assertEqual(self.target().FindFirstType("_BitInt(65)").size, 16) + self.assertEqual( + self.target().FindFirstType("unsigned _BitInt(65)").name, + "unsigned _BitInt(65)", + ) + self.assertEqual(self.target().FindFirstType("unsigned _BitInt(65)").size, 16) From e46d8f3037eaf9c84dd8f0d875013ff574fc04af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Ko=C5=A1=C3=ADk?= <[email protected]> Date: Fri, 31 Oct 2025 10:37:51 +0100 Subject: [PATCH 2/3] [lldb] fix the "TypeSystemClang::GetBuiltinTypeByName" method --- .../Plugins/TypeSystem/Clang/TypeSystemClang.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp b/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp index 6ec054d5eac05..cfa936415d634 100644 --- a/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp +++ b/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp @@ -5498,6 +5498,17 @@ TypeSystemClang::GetNumChildren(lldb::opaque_compiler_type_t type, } CompilerType TypeSystemClang::GetBuiltinTypeByName(ConstString name) { + StringRef name_ref = name.GetStringRef(); + llvm::Regex re("^(unsigned )?_BitInt\\((.*)\\)$"); + llvm::SmallVector<llvm::StringRef, 4> matches; + bool is_bitint = re.match(name_ref, &matches); + if (is_bitint && matches.size() == 3) { + bool is_unsigned = matches[1] == "unsigned "; + llvm::APInt ap_bit_size; + if (!matches[2].getAsInteger(10, ap_bit_size)) + return GetType(getASTContext().getBitIntType(is_unsigned, + ap_bit_size.getZExtValue())); + } return GetBasicType(GetBasicTypeEnumeration(name)); } From 0c91339d79e605e1ac1cc7ad5f882025d5138e25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Ko=C5=A1=C3=ADk?= <[email protected]> Date: Fri, 31 Oct 2025 10:46:40 +0100 Subject: [PATCH 3/3] [lldb] some more (although unrelated) tests --- .../API/python_api/sbtype_basic_type/TestSBTypeBasicType.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lldb/test/API/python_api/sbtype_basic_type/TestSBTypeBasicType.py b/lldb/test/API/python_api/sbtype_basic_type/TestSBTypeBasicType.py index 99617cc68d19f..07a4fae82677d 100644 --- a/lldb/test/API/python_api/sbtype_basic_type/TestSBTypeBasicType.py +++ b/lldb/test/API/python_api/sbtype_basic_type/TestSBTypeBasicType.py @@ -30,11 +30,17 @@ def test(self): self.assertEqual(d.GetType().GetBasicType(), int_basic_type) # Check the size of the chosen basic types. + self.assertEqual(self.target().FindFirstType("__int128").name, "__int128") self.assertEqual(self.target().FindFirstType("__int128").size, 16) + self.assertEqual( + self.target().FindFirstType("unsigned __int128").name, "unsigned __int128" + ) self.assertEqual(self.target().FindFirstType("unsigned __int128").size, 16) # Check the size of the chosen aliases of basic types. + self.assertEqual(self.target().FindFirstType("__int128_t").name, "__int128_t") self.assertEqual(self.target().FindFirstType("__int128_t").size, 16) + self.assertEqual(self.target().FindFirstType("__uint128_t").name, "__uint128_t") self.assertEqual(self.target().FindFirstType("__uint128_t").size, 16) # "_BitInt(...)" and "unsigned _BitInt(...)" are GNU C compiler extensions _______________________________________________ lldb-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
