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/5] [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/5] [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/5] [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/5] [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/5] [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); _______________________________________________ lldb-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
