[CodeView] Implement support for bitfields in LLVM
CodeView need to know the offset of the storage allocation for a bitfield. Encode this via the "extraData" field in DIDerivedType and introduced a new flag, DIFlagBitField, to indicate whether or not a member is a bitfield. This fixes PR28162. Differential Revision: http://reviews.llvm.org/D21782 llvm-svn: 274200
This commit is contained in:
@@ -308,6 +308,18 @@ static ConstantAsMetadata *getConstantOrNull(Constant *C) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
DIDerivedType *DIBuilder::createBitFieldMemberType(
|
||||
DIScope *Scope, StringRef Name, DIFile *File, unsigned LineNumber,
|
||||
uint64_t SizeInBits, uint64_t AlignInBits, uint64_t OffsetInBits,
|
||||
uint64_t StorageOffsetInBits, unsigned Flags, DIType *Ty) {
|
||||
Flags |= DINode::FlagBitField;
|
||||
return DIDerivedType::get(
|
||||
VMContext, dwarf::DW_TAG_member, Name, File, LineNumber,
|
||||
getNonCompileUnitScope(Scope), Ty, SizeInBits, AlignInBits, OffsetInBits,
|
||||
Flags, ConstantAsMetadata::get(ConstantInt::get(
|
||||
IntegerType::get(VMContext, 64), StorageOffsetInBits)));
|
||||
}
|
||||
|
||||
DIDerivedType *DIBuilder::createStaticMemberType(DIScope *Scope, StringRef Name,
|
||||
DIFile *File,
|
||||
unsigned LineNumber,
|
||||
|
||||
Reference in New Issue
Block a user