https://github.com/sedymrak updated https://github.com/llvm/llvm-project/pull/165857
From 7ce461e04700d159ee9b74fafb00dfe6bd0d1021 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/4] [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 8df59f7c6dabb2014916d200d7808f6948978cf6 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/4] [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 51cb883748514..014899cb57974 100644 --- a/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp +++ b/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp @@ -5506,6 +5506,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 a128f9577b1e1a67f3b6394cc8972f8337183a86 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/4] [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 014899cb57974..e167609d74006 100644 --- a/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp +++ b/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp @@ -5508,7 +5508,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 87a243b530b30a92fd99511c787f1ea00616efde 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/4] [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 e167609d74006..a10b5013f0eeb 100644 --- a/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp +++ b/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp @@ -5507,15 +5507,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)); } _______________________________________________ lldb-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
