forked from OSchip/llvm-project
Fixes debug info generation problem for ms_struct structs.
// rdar://8823265 llvm-svn: 130458
This commit is contained in:
parent
6cd4d1d85a
commit
6d003c3041
|
@ -618,18 +618,31 @@ void CGDebugInfo::
|
|||
CollectRecordFields(const RecordDecl *record, llvm::DIFile tunit,
|
||||
llvm::SmallVectorImpl<llvm::Value *> &elements) {
|
||||
unsigned fieldNo = 0;
|
||||
const FieldDecl *LastFD = 0;
|
||||
bool IsMsStruct = record->hasAttr<MsStructAttr>();
|
||||
|
||||
const ASTRecordLayout &layout = CGM.getContext().getASTRecordLayout(record);
|
||||
for (RecordDecl::field_iterator I = record->field_begin(),
|
||||
E = record->field_end();
|
||||
I != E; ++I, ++fieldNo) {
|
||||
FieldDecl *field = *I;
|
||||
if (IsMsStruct) {
|
||||
// Zero-length bitfields following non-bitfield members are ignored
|
||||
if (CGM.getContext().ZeroBitfieldFollowsNonBitfield((field), LastFD)) {
|
||||
--fieldNo;
|
||||
continue;
|
||||
}
|
||||
LastFD = field;
|
||||
}
|
||||
|
||||
llvm::StringRef name = field->getName();
|
||||
QualType type = field->getType();
|
||||
|
||||
// Ignore unnamed fields unless they're anonymous structs/unions.
|
||||
if (name.empty() && !type->isRecordType())
|
||||
if (name.empty() && !type->isRecordType()) {
|
||||
LastFD = field;
|
||||
continue;
|
||||
}
|
||||
|
||||
llvm::DIType fieldType
|
||||
= createFieldType(name, type, field->getBitWidth(),
|
||||
|
|
Loading…
Reference in New Issue