зеркало из https://github.com/microsoft/clang-1.git
Revert "Use the 'count' attribute instead of the 'upper_bound' attribute."
temporarily since it breaks the gdb bots. This reverts commit r167807/30305bec25cac981c6d4a3b8be004401310a82a7. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@167887 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
25f071eedf
Коммит
0c949efad5
|
@ -1473,23 +1473,23 @@ llvm::DIType CGDebugInfo::CreateType(const ObjCInterfaceType *Ty,
|
|||
|
||||
llvm::DIType CGDebugInfo::CreateType(const VectorType *Ty, llvm::DIFile Unit) {
|
||||
llvm::DIType ElementTy = getOrCreateType(Ty->getElementType(), Unit);
|
||||
int64_t UpperBound = Ty->getNumElements();
|
||||
int64_t NumElems = Ty->getNumElements();
|
||||
int64_t LowerBound = 0;
|
||||
if (UpperBound == 0)
|
||||
if (NumElems == 0)
|
||||
// If number of elements are not known then this is an unbounded array.
|
||||
// Use Low = 1, Hi = 0 to express such arrays.
|
||||
LowerBound = 1;
|
||||
else
|
||||
--UpperBound;
|
||||
--NumElems;
|
||||
|
||||
llvm::Value *Subscript = DBuilder.getOrCreateSubrange(LowerBound, UpperBound,
|
||||
Ty->getNumElements());
|
||||
llvm::Value *Subscript = DBuilder.getOrCreateSubrange(LowerBound, NumElems);
|
||||
llvm::DIArray SubscriptArray = DBuilder.getOrCreateArray(Subscript);
|
||||
|
||||
uint64_t Size = CGM.getContext().getTypeSize(Ty);
|
||||
uint64_t Align = CGM.getContext().getTypeAlign(Ty);
|
||||
|
||||
return DBuilder.createVectorType(Size, Align, ElementTy, SubscriptArray);
|
||||
return
|
||||
DBuilder.createVectorType(Size, Align, ElementTy, SubscriptArray);
|
||||
}
|
||||
|
||||
llvm::DIType CGDebugInfo::CreateType(const ArrayType *Ty,
|
||||
|
@ -1525,11 +1525,9 @@ llvm::DIType CGDebugInfo::CreateType(const ArrayType *Ty,
|
|||
while ((Ty = dyn_cast<ArrayType>(EltTy))) {
|
||||
int64_t UpperBound = 0;
|
||||
int64_t LowerBound = 0;
|
||||
uint64_t Count = 0;
|
||||
if (const ConstantArrayType *CAT = dyn_cast<ConstantArrayType>(Ty)) {
|
||||
Count = CAT->getSize().getZExtValue();
|
||||
if (Count)
|
||||
UpperBound = Count - 1;
|
||||
if (CAT->getSize().getZExtValue())
|
||||
UpperBound = CAT->getSize().getZExtValue() - 1;
|
||||
} else
|
||||
// This is an unbounded array. Use Low = 1, Hi = 0 to express such
|
||||
// arrays.
|
||||
|
@ -1537,8 +1535,7 @@ llvm::DIType CGDebugInfo::CreateType(const ArrayType *Ty,
|
|||
|
||||
// FIXME: Verify this is right for VLAs.
|
||||
Subscripts.push_back(DBuilder.getOrCreateSubrange(LowerBound,
|
||||
UpperBound,
|
||||
Count));
|
||||
UpperBound));
|
||||
EltTy = Ty->getElementType();
|
||||
}
|
||||
|
||||
|
|
|
@ -1,33 +0,0 @@
|
|||
// RUN: %clang -emit-llvm -S -g %s -o - | FileCheck %s
|
||||
|
||||
// <rdar://problem/12566646>
|
||||
|
||||
// The subrange for a type 'int[1]' and 'int[0]' should be different. Use the
|
||||
// 'count' attribute instead of the 'upper_bound' attribute do disabmiguate the
|
||||
// DIE.
|
||||
|
||||
struct foo {
|
||||
int a;
|
||||
int b[1];
|
||||
};
|
||||
|
||||
struct bar {
|
||||
int a;
|
||||
int b[0];
|
||||
};
|
||||
|
||||
int main()
|
||||
{
|
||||
struct foo my_foo;
|
||||
struct bar my_bar;
|
||||
|
||||
my_foo.a = 3;
|
||||
my_bar.a = 5;
|
||||
|
||||
return my_foo.a + my_bar.a;
|
||||
}
|
||||
|
||||
// The third metadata operand is the count.
|
||||
//
|
||||
// CHECK: metadata !{i32 786465, i64 0, i64 0, i64 1} ; [ DW_TAG_subrange_type ]
|
||||
// CHECK: metadata !{i32 786465, i64 0, i64 0, i64 0} ; [ DW_TAG_subrange_type ]
|
|
@ -1,6 +1,6 @@
|
|||
// RUN: %clang_cc1 -emit-llvm -g -triple x86_64-apple-darwin %s -o - | FileCheck %s
|
||||
|
||||
// CHECK: metadata !{i32 {{.*}}, i64 1, i64 0, i64 0} ; [ DW_TAG_subrange_type ]
|
||||
// CHECK: metadata !{i32 {{.*}}, i64 1, i64 0} ; [ DW_TAG_subrange_type ]
|
||||
|
||||
struct StructName {
|
||||
int member[];
|
||||
|
|
Загрузка…
Ссылка в новой задаче