Index: llvm/trunk/lib/Target/BPF/BTFDebug.cpp =================================================================== --- llvm/trunk/lib/Target/BPF/BTFDebug.cpp +++ llvm/trunk/lib/Target/BPF/BTFDebug.cpp @@ -473,35 +473,29 @@ void BTFDebug::visitArrayType(const DICompositeType *CTy, uint32_t &TypeId) { // Visit array element type. - uint32_t ElemTypeId, ElemSize; + uint32_t ElemTypeId; const DIType *ElemType = CTy->getBaseType(); visitTypeEntry(ElemType, ElemTypeId, false, false); - // Strip qualifiers from element type to get accurate element size. - ElemSize = ElemType->getSizeInBits() >> 3; - - if (!CTy->getSizeInBits()) { - auto TypeEntry = std::make_unique(ElemTypeId, 0); - ElemTypeId = addType(std::move(TypeEntry), CTy); - } else { - // Visit array dimensions. - DINodeArray Elements = CTy->getElements(); - for (int I = Elements.size() - 1; I >= 0; --I) { - if (auto *Element = dyn_cast_or_null(Elements[I])) - if (Element->getTag() == dwarf::DW_TAG_subrange_type) { - const DISubrange *SR = cast(Element); - auto *CI = SR->getCount().dyn_cast(); - int64_t Count = CI->getSExtValue(); - - auto TypeEntry = - std::make_unique(ElemTypeId, Count); - if (I == 0) - ElemTypeId = addType(std::move(TypeEntry), CTy); - else - ElemTypeId = addType(std::move(TypeEntry)); - ElemSize = ElemSize * Count; - } - } + // Visit array dimensions. + DINodeArray Elements = CTy->getElements(); + for (int I = Elements.size() - 1; I >= 0; --I) { + if (auto *Element = dyn_cast_or_null(Elements[I])) + if (Element->getTag() == dwarf::DW_TAG_subrange_type) { + const DISubrange *SR = cast(Element); + auto *CI = SR->getCount().dyn_cast(); + int64_t Count = CI->getSExtValue(); + + // For struct s { int b; char c[]; }, the c[] will be represented + // as an array with Count = -1. + auto TypeEntry = + std::make_unique(ElemTypeId, + Count >= 0 ? Count : 0); + if (I == 0) + ElemTypeId = addType(std::move(TypeEntry), CTy); + else + ElemTypeId = addType(std::move(TypeEntry)); + } } // The array TypeId is the type id of the outermost dimension. Index: llvm/trunk/test/CodeGen/BPF/BTF/array-size-0.ll =================================================================== --- llvm/trunk/test/CodeGen/BPF/BTF/array-size-0.ll +++ llvm/trunk/test/CodeGen/BPF/BTF/array-size-0.ll @@ -32,7 +32,7 @@ ; CHECK-NEXT: .long 0 ; CHECK-NEXT: .long 1 ; CHECK-NEXT: .long 3 -; CHECK-NEXT: .long 0 +; CHECK-NEXT: .long 10 ; CHECK-NEXT: .long 3 # BTF_KIND_INT(id = 3) ; CHECK-NEXT: .long 16777216 # 0x1000000 ; CHECK-NEXT: .long 4