https://github.com/sedymrak updated https://github.com/llvm/llvm-project/pull/165857
From 6d4c709db9ba4895d190c96f810ea8f3ca513511 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/9] [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 215d22ce25553cb0a0060217c4236ca4610d8bda 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/9] [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 1e1b265ba195a..8fe283c3a61fc 100644 --- a/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp +++ b/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp @@ -5508,6 +5508,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 a31e747b46ab132bd23a1ac4a44b58ab0ff44f48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Ko=C5=A1=C3=ADk?= <[email protected]> Date: Wed, 19 Nov 2025 15:47:20 +0100 Subject: [PATCH 3/9] [lldb] simplify the code --- lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp b/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp index 8fe283c3a61fc..2b8618371700c 100644 --- a/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp +++ b/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp @@ -5510,7 +5510,7 @@ 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; + llvm::SmallVector<llvm::StringRef, 3> matches; bool is_bitint = re.match(name_ref, &matches); if (is_bitint && matches.size() == 3) { bool is_unsigned = matches[1] == "unsigned "; From dd498a02744d5470e0d2fc9ea9c4d22b77eb4d74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Ko=C5=A1=C3=ADk?= <[email protected]> Date: Wed, 19 Nov 2025 22:14:43 +0100 Subject: [PATCH 4/9] [lldb] wrap regex compilation in a conditional to avoid unnecessary compilation of regex --- .../TypeSystem/Clang/TypeSystemClang.cpp | 23 +++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp b/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp index 2b8618371700c..a0bb0b15a1af5 100644 --- a/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp +++ b/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp @@ -5509,15 +5509,20 @@ 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, 3> 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())); + // We compile the regex only the type name fulfills certain + // necessary conditions. Otherwise we do not bother. + if (!name_ref.empty() && name_ref[0] == '_' || + name_ref.size() >= 10 && name_ref[9] == '_') { + llvm::Regex re("^(unsigned )?_BitInt\\((.*)\\)$"); + llvm::SmallVector<llvm::StringRef, 3> 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 9b63880c934b670436dfc7b77beb72c6e21bc793 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Ko=C5=A1=C3=ADk?= <[email protected]> Date: Sun, 11 Jan 2026 17:32:18 +0100 Subject: [PATCH 5/9] [lldb] make changes to avoid -Werror,-Wlogical-op-parentheses warning --- lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp b/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp index a0bb0b15a1af5..238ab0299aedc 100644 --- a/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp +++ b/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp @@ -5511,8 +5511,8 @@ CompilerType TypeSystemClang::GetBuiltinTypeByName(ConstString name) { StringRef name_ref = name.GetStringRef(); // We compile the regex only the type name fulfills certain // necessary conditions. Otherwise we do not bother. - if (!name_ref.empty() && name_ref[0] == '_' || - name_ref.size() >= 10 && name_ref[9] == '_') { + if ((!name_ref.empty() && name_ref[0] == '_') || + (name_ref.size() >= 10 && name_ref[9] == '_')) { llvm::Regex re("^(unsigned )?_BitInt\\((.*)\\)$"); llvm::SmallVector<llvm::StringRef, 3> matches; bool is_bitint = re.match(name_ref, &matches); From c2046542d5e67b3802d9449f45cd21d39d12c590 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Ko=C5=A1=C3=ADk?= <[email protected]> Date: Mon, 12 Jan 2026 12:52:48 +0100 Subject: [PATCH 6/9] [lldb] incorporate Michael's advice --- .../TypeSystem/Clang/TypeSystemClang.cpp | 23 +++++++++---------- 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp b/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp index 238ab0299aedc..70b5c87b21bb7 100644 --- a/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp +++ b/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp @@ -5511,18 +5511,17 @@ CompilerType TypeSystemClang::GetBuiltinTypeByName(ConstString name) { StringRef name_ref = name.GetStringRef(); // We compile the regex only the type name fulfills certain // necessary conditions. Otherwise we do not bother. - if ((!name_ref.empty() && name_ref[0] == '_') || - (name_ref.size() >= 10 && name_ref[9] == '_')) { - llvm::Regex re("^(unsigned )?_BitInt\\((.*)\\)$"); - llvm::SmallVector<llvm::StringRef, 3> 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())); - } + if (name_ref.consume_front("unsigned _BitInt(") || + name_ref.consume_front("_BitInt(")) { + uint64_t bit_size; + if (name_ref.consumeInteger(/*Radix=*/10, bit_size)) + return {}; + + if (!name_ref.consume_front(")")) + return {}; + + return GetType(getASTContext().getBitIntType( + name.GetStringRef().starts_with("unsigned"), bit_size)); } return GetBasicType(GetBasicTypeEnumeration(name)); } From a000f87eecc93c6c5fd806539682dd4e51ec5006 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Ko=C5=A1=C3=ADk?= <[email protected]> Date: Mon, 12 Jan 2026 15:33:39 +0100 Subject: [PATCH 7/9] Update lldb/test/API/python_api/sbtype_basic_type/TestSBTypeBasicType.py Co-authored-by: Michael Buch <[email protected]> --- .../API/python_api/sbtype_basic_type/TestSBTypeBasicType.py | 6 ------ 1 file changed, 6 deletions(-) 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..3643ae27c0d8c 100644 --- a/lldb/test/API/python_api/sbtype_basic_type/TestSBTypeBasicType.py +++ b/lldb/test/API/python_api/sbtype_basic_type/TestSBTypeBasicType.py @@ -37,12 +37,6 @@ def test(self): 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( From d8c677163ea2f3dde4b88f550f8f2dcd184c839d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Ko=C5=A1=C3=ADk?= <[email protected]> Date: Mon, 12 Jan 2026 19:21:39 +0100 Subject: [PATCH 8/9] [lldb] add more assertions to the "SBTypeBasicType" API test --- .../python_api/sbtype_basic_type/TestSBTypeBasicType.py | 8 ++++++++ 1 file changed, 8 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 3643ae27c0d8c..12d80c7aa3a8a 100644 --- a/lldb/test/API/python_api/sbtype_basic_type/TestSBTypeBasicType.py +++ b/lldb/test/API/python_api/sbtype_basic_type/TestSBTypeBasicType.py @@ -37,6 +37,14 @@ def test(self): self.assertEqual(self.target().FindFirstType("__int128_t").size, 16) self.assertEqual(self.target().FindFirstType("__uint128_t").size, 16) + self.assertEqual(self.target().FindFirstType("_BitInt").name, "") + self.assertEqual(self.target().FindFirstType("unsigned _BitInt").name, "") + self.assertEqual(self.target().FindFirstType("_BitInt()").name, "") + self.assertEqual(self.target().FindFirstType("unsigned _BitInt()").name, "") + self.assertEqual(self.target().FindFirstType("_BitInt(65").name, "") + self.assertEqual(self.target().FindFirstType("unsigned _BitInt(65").name, "") + self.assertEqual(self.target().FindFirstType("_BitInt(0x41)").name, "") + self.assertEqual(self.target().FindFirstType("unsigned _BitInt(0x41)").name, "") self.assertEqual(self.target().FindFirstType("_BitInt(65)").name, "_BitInt(65)") self.assertEqual(self.target().FindFirstType("_BitInt(65)").size, 16) self.assertEqual( From 4a381c6a55e9ca137ed7ec4f8715602d8a4d8395 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Ko=C5=A1=C3=ADk?= <[email protected]> Date: Mon, 12 Jan 2026 20:44:49 +0100 Subject: [PATCH 9/9] [lldb] simplify the assertions in the "SBTypeBasicType" API test --- .../sbtype_basic_type/TestSBTypeBasicType.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) 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 12d80c7aa3a8a..784f3e177d970 100644 --- a/lldb/test/API/python_api/sbtype_basic_type/TestSBTypeBasicType.py +++ b/lldb/test/API/python_api/sbtype_basic_type/TestSBTypeBasicType.py @@ -37,14 +37,14 @@ def test(self): self.assertEqual(self.target().FindFirstType("__int128_t").size, 16) self.assertEqual(self.target().FindFirstType("__uint128_t").size, 16) - self.assertEqual(self.target().FindFirstType("_BitInt").name, "") - self.assertEqual(self.target().FindFirstType("unsigned _BitInt").name, "") - self.assertEqual(self.target().FindFirstType("_BitInt()").name, "") - self.assertEqual(self.target().FindFirstType("unsigned _BitInt()").name, "") - self.assertEqual(self.target().FindFirstType("_BitInt(65").name, "") - self.assertEqual(self.target().FindFirstType("unsigned _BitInt(65").name, "") - self.assertEqual(self.target().FindFirstType("_BitInt(0x41)").name, "") - self.assertEqual(self.target().FindFirstType("unsigned _BitInt(0x41)").name, "") + self.assertFalse(self.target().FindFirstType("_BitInt")) + self.assertFalse(self.target().FindFirstType("unsigned _BitInt")) + self.assertFalse(self.target().FindFirstType("_BitInt()")) + self.assertFalse(self.target().FindFirstType("unsigned _BitInt()")) + self.assertFalse(self.target().FindFirstType("_BitInt(65")) + self.assertFalse(self.target().FindFirstType("unsigned _BitInt(65")) + self.assertFalse(self.target().FindFirstType("_BitInt(0x41)")) + self.assertFalse(self.target().FindFirstType("unsigned _BitInt(0x41)")) self.assertEqual(self.target().FindFirstType("_BitInt(65)").name, "_BitInt(65)") self.assertEqual(self.target().FindFirstType("_BitInt(65)").size, 16) self.assertEqual( _______________________________________________ lldb-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
