================
@@ -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;
+ Vals.reserve(NumElts);
+ bool Success = true;
+ for (unsigned I = 0; I < NumInits && Success; ++I) {
+ const APValue &Elt = Value->getArrayInitializedElt(I);
+ if (Elt.isInt())
+ Vals.push_back(Elt.getInt().getZExtValue());
+ else
+ Success = false;
+ }
+ // Fill remaining elements with the filler value (e.g., the
+ // null terminator region for strings).
+ if (Success && NumInits < NumElts) {
+ const APValue &Filler = Value->getArrayFiller();
+ if (Filler.isInt())
+ Vals.resize(NumElts, Filler.getInt().getZExtValue());
----------------
phyBrackets wrote:
alright, sounds good, I'll update it
https://github.com/llvm/llvm-project/pull/182442
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits