Revert r273807 (and r273809, r273810), it caused PR28311
llvm-svn: 273815
diff --git a/llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp b/llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp
index 46917f8..e01ee09 100644
--- a/llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp
+++ b/llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp
@@ -911,55 +911,9 @@
TypeIndex IndexType = Asm->MAI->getPointerSize() == 8
? TypeIndex(SimpleTypeKind::UInt64Quad)
: TypeIndex(SimpleTypeKind::UInt32Long);
- assert(ElementTypeRef.resolve());
- uint64_t ElementSize = ElementTypeRef.resolve()->getSizeInBits() / 8;
-
- bool UndefinedSubrange = false;
-
- // FIXME:
- // There is a bug in the front-end where an array of a structure, which was
- // declared as incomplete structure first, ends up not getting a size assigned
- // to it. (PR28303)
- // Example:
- // struct A(*p)[3];
- // struct A { int f; } a[3];
- //
- // This needs to be fixed in the front-end, but in the meantime we don't want
- // to trigger an assertion because of this.
- if (Ty->getSizeInBits() == 0) {
- UndefinedSubrange = true;
- }
-
- // Add subranges to array type.
- DINodeArray Elements = Ty->getElements();
- for (int i = Elements.size() - 1; i >= 0; --i) {
- const DINode *Element = Elements[i];
- assert(Element->getTag() == dwarf::DW_TAG_subrange_type);
-
- const DISubrange *Subrange = cast<DISubrange>(Element);
- assert(Subrange->getLowerBound() == 0 &&
- "codeview doesn't support subranges with lower bounds");
- int64_t Count = Subrange->getCount();
-
- // Variable Length Array (VLA) has Count equal to '-1'.
- // Replace with Count '1', assume it is the minimum VLA length.
- // FIXME: Make front-end support VLA subrange and emit LF_DIMVARLU.
- if (Count == -1) {
- Count = 1;
- UndefinedSubrange = true;
- }
-
- StringRef Name = (i == 0) ? Ty->getName() : "";
- // Update the element size and element type index for subsequent subranges.
- ElementSize *= Count;
- ElementTypeIndex = TypeTable.writeArray(
- ArrayRecord(ElementTypeIndex, IndexType, ElementSize, Name));
- }
-
- (void)UndefinedSubrange;
- assert(UndefinedSubrange || ElementSize == (Ty->getSizeInBits() / 8));
-
- return ElementTypeIndex;
+ uint64_t Size = Ty->getSizeInBits() / 8;
+ ArrayRecord Record(ElementTypeIndex, IndexType, Size, Ty->getName());
+ return TypeTable.writeArray(Record);
}
TypeIndex CodeViewDebug::lowerTypeBasic(const DIBasicType *Ty) {