================
@@ -2097,6 +2092,53 @@ CGDebugInfo::CreateRecordStaticField(const VarDecl *Var, 
llvm::DIType *RecordTy,
         C = llvm::ConstantInt::get(CGM.getLLVMContext(), Value->getInt());
       if (Value->isFloat())
         C = llvm::ConstantFP::get(CGM.getLLVMContext(), Value->getFloat());
+      if (Value->isArray()) {
+        // Handle constexpr array constants for debug info
+        // We handle arrays of integer types (char, short, int, long),
+        // which covers the most common and useful cases.
+        if (const auto *ArrayTy =
+                CGM.getContext().getAsArrayType(Var->getType())) {
+          QualType ElemQTy = ArrayTy->getElementType();
+          if (ElemQTy->isIntegerType()) {
+            unsigned ElemBitWidth = CGM.getContext().getTypeSize(ElemQTy);
+            unsigned NumElts = Value->getArraySize();
+            unsigned NumInits = Value->getArrayInitializedElts();
+            SmallVector<uint64_t, 64> Vals;
----------------
phyBrackets wrote:

With the refactored version (preallocating with filler), there's no separate 
reserve call anymore, the SmallVector is constructed directly with NumElts 
elements. The inline size of 64 avoids heap allocation for the common case of 
small arrays.

https://github.com/llvm/llvm-project/pull/182442
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to