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

Reply via email to