diff options
Diffstat (limited to 'clang/lib/CodeGen')
-rw-r--r-- | clang/lib/CodeGen/CGRecordLayout.h | 2 | ||||
-rw-r--r-- | clang/lib/CodeGen/CGRecordLayoutBuilder.cpp | 6 |
2 files changed, 5 insertions, 3 deletions
diff --git a/clang/lib/CodeGen/CGRecordLayout.h b/clang/lib/CodeGen/CGRecordLayout.h index 0fc7b8acbd4..b45fee56ea0 100644 --- a/clang/lib/CodeGen/CGRecordLayout.h +++ b/clang/lib/CodeGen/CGRecordLayout.h @@ -183,6 +183,7 @@ public: /// \brief Return llvm::StructType element number that corresponds to the /// field FD. unsigned getLLVMFieldNo(const FieldDecl *FD) const { + FD = FD->getCanonicalDecl(); assert(FieldInfo.count(FD) && "Invalid field for record!"); return FieldInfo.lookup(FD); } @@ -201,6 +202,7 @@ public: /// \brief Return the BitFieldInfo that corresponds to the field FD. const CGBitFieldInfo &getBitFieldInfo(const FieldDecl *FD) const { + FD = FD->getCanonicalDecl(); assert(FD->isBitField() && "Invalid call for non-bit-field decl!"); llvm::DenseMap<const FieldDecl *, CGBitFieldInfo>::const_iterator it = BitFields.find(FD); diff --git a/clang/lib/CodeGen/CGRecordLayoutBuilder.cpp b/clang/lib/CodeGen/CGRecordLayoutBuilder.cpp index 75b4504ca62..b7ab169a64f 100644 --- a/clang/lib/CodeGen/CGRecordLayoutBuilder.cpp +++ b/clang/lib/CodeGen/CGRecordLayoutBuilder.cpp @@ -212,7 +212,7 @@ CGRecordLowering::CGRecordLowering(CodeGenTypes &Types, const RecordDecl *D) void CGRecordLowering::setBitFieldInfo( const FieldDecl *FD, CharUnits StartOffset, llvm::Type *StorageType) { - CGBitFieldInfo &Info = BitFields[FD]; + CGBitFieldInfo &Info = BitFields[FD->getCanonicalDecl()]; Info.IsSigned = FD->getType()->isSignedIntegerOrEnumerationType(); Info.Offset = (unsigned)(getFieldBitOffset(FD) - Context.toBits(StartOffset)); Info.Size = FD->getBitWidthValue(Context); @@ -297,7 +297,7 @@ void CGRecordLowering::lowerUnion() { FieldType = getByteArrayType(LayoutSize); setBitFieldInfo(Field, CharUnits::Zero(), FieldType); } - Fields[Field] = 0; + Fields[Field->getCanonicalDecl()] = 0; llvm::Type *FieldType = getStorageType(Field); // Conditionally update our storage type if we've got a new "better" one. if (!StorageType || @@ -570,7 +570,7 @@ void CGRecordLowering::fillOutputFields() { FieldTypes.push_back(Member->Data); if (Member->Kind == MemberInfo::Field) { if (Member->FD) - Fields[Member->FD] = FieldTypes.size() - 1; + Fields[Member->FD->getCanonicalDecl()] = FieldTypes.size() - 1; // A field without storage must be a bitfield. if (!Member->Data) setBitFieldInfo(Member->FD, Member->Offset, FieldTypes.back()); |