Pull in r157212 from upstream clang trunk:
Revert r115805. An array type is required to have a range type, however, the range can be unknown for the upper bound. Testcase to follow. Part of rdar://11457152 This should fix ctfconvert producing error messages during kernel builds, similar to: ERROR: scsi_all.c: die 24561: failed to retrieve array bounds These were caused by incorrect debug information for flexible array members of structs. MFC after: 3 days
This commit is contained in:
parent
8f62d384b9
commit
1cbbf59138
@ -1479,25 +1479,21 @@ llvm::DIType CGDebugInfo::CreateType(const ArrayType *Ty,
|
||||
// obvious/recursive way?
|
||||
SmallVector<llvm::Value *, 8> Subscripts;
|
||||
QualType EltTy(Ty, 0);
|
||||
if (Ty->isIncompleteArrayType())
|
||||
while ((Ty = dyn_cast<ArrayType>(EltTy))) {
|
||||
int64_t UpperBound = 0;
|
||||
int64_t LowerBound = 0;
|
||||
if (const ConstantArrayType *CAT = dyn_cast<ConstantArrayType>(Ty)) {
|
||||
if (CAT->getSize().getZExtValue())
|
||||
UpperBound = CAT->getSize().getZExtValue() - 1;
|
||||
} else
|
||||
// This is an unbounded array. Use Low = 1, Hi = 0 to express such
|
||||
// arrays.
|
||||
LowerBound = 1;
|
||||
|
||||
// FIXME: Verify this is right for VLAs.
|
||||
Subscripts.push_back(DBuilder.getOrCreateSubrange(LowerBound,
|
||||
UpperBound));
|
||||
EltTy = Ty->getElementType();
|
||||
else {
|
||||
while ((Ty = dyn_cast<ArrayType>(EltTy))) {
|
||||
int64_t UpperBound = 0;
|
||||
int64_t LowerBound = 0;
|
||||
if (const ConstantArrayType *CAT = dyn_cast<ConstantArrayType>(Ty)) {
|
||||
if (CAT->getSize().getZExtValue())
|
||||
UpperBound = CAT->getSize().getZExtValue() - 1;
|
||||
} else
|
||||
// This is an unbounded array. Use Low = 1, Hi = 0 to express such
|
||||
// arrays.
|
||||
LowerBound = 1;
|
||||
|
||||
// FIXME: Verify this is right for VLAs.
|
||||
Subscripts.push_back(DBuilder.getOrCreateSubrange(LowerBound,
|
||||
UpperBound));
|
||||
EltTy = Ty->getElementType();
|
||||
}
|
||||
}
|
||||
|
||||
llvm::DIArray SubscriptArray = DBuilder.getOrCreateArray(Subscripts);
|
||||
|
Loading…
Reference in New Issue
Block a user