https://github.com/swedgwood created 
https://github.com/llvm/llvm-project/pull/150208

Decided I would take a stab at 
https://github.com/llvm/llvm-project/issues/110273 (I'm the same person but 
different account)

Still WIP (I'm very new to the codebase!) - but right now (as of 567cb48)  LLDB 
will no longer say 'Unable to determine byte size' and display the correct 
values for signed/unsigned `_BitInt`s provided their bit size is a multiple of 
8 (as something is still wrong with the way clang compiles the DWARF info, and 
maybe also with the way LLDB parses it)

>From 567cb482dd63541a6f4569582a44e17556fe01f0 Mon Sep 17 00:00:00 2001
From: Sam Wedgwood <s...@wedgwood.dev>
Date: Wed, 23 Jul 2025 12:00:07 +0100
Subject: [PATCH] partial support in lldb

---
 .../TypeSystem/Clang/TypeSystemClang.cpp        | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp 
b/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp
index bafe9d56a93bf..5c812b05ddb43 100644
--- a/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp
+++ b/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp
@@ -1013,6 +1013,11 @@ CompilerType 
TypeSystemClang::GetBuiltinTypeForDWARFEncodingAndBitSize(
         if (QualTypeMatchesBitSize(bit_size, ast, ast.Int128Ty))
           return GetType(ast.Int128Ty);
       }
+      if (type_name.contains("_BitInt")) {
+        auto bitIntTy = ast.getBitIntType(false, bit_size);
+        if (QualTypeMatchesBitSize(bit_size, ast, bitIntTy))
+          return GetType(bitIntTy);
+      }
     }
     // We weren't able to match up a type name, just search by size
     if (QualTypeMatchesBitSize(bit_size, ast, ast.CharTy))
@@ -1064,6 +1069,10 @@ CompilerType 
TypeSystemClang::GetBuiltinTypeForDWARFEncodingAndBitSize(
           return GetType(ast.UnsignedIntTy);
         if (QualTypeMatchesBitSize(bit_size, ast, ast.UnsignedInt128Ty))
           return GetType(ast.UnsignedInt128Ty);
+      } else if (type_name.contains("_BitInt")) {
+        auto bitIntTy = ast.getBitIntType(true, bit_size);
+        if (QualTypeMatchesBitSize(bit_size, ast, bitIntTy))
+          return GetType(bitIntTy);
       }
     }
     // We weren't able to match up a type name, just search by size
@@ -3858,6 +3867,14 @@ 
TypeSystemClang::GetTypeInfo(lldb::opaque_compiler_type_t type,
                            ->getModifiedType()
                            .getAsOpaquePtr(),
                        pointee_or_element_clang_type);
+  case clang::Type::BitInt: {
+    const clang::BitIntType *bitint_type = 
llvm::cast<clang::BitIntType>(qual_type->getCanonicalTypeInternal());
+    uint32_t bitint_type_flags = eTypeHasValue | eTypeIsScalar | 
eTypeIsInteger;
+    if (bitint_type->isSigned()) {
+      bitint_type_flags |= eTypeIsSigned;
+    }
+    return bitint_type_flags;
+  }
   case clang::Type::Builtin: {
     const clang::BuiltinType *builtin_type =
         llvm::cast<clang::BuiltinType>(qual_type->getCanonicalTypeInternal());

_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to