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?
|
// obvious/recursive way?
|
||||||
SmallVector<llvm::Value *, 8> Subscripts;
|
SmallVector<llvm::Value *, 8> Subscripts;
|
||||||
QualType EltTy(Ty, 0);
|
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();
|
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);
|
llvm::DIArray SubscriptArray = DBuilder.getOrCreateArray(Subscripts);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user