diff options
author | Daniel Dunbar <daniel@zuster.org> | 2010-04-22 02:35:36 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2010-04-22 02:35:36 +0000 |
commit | b6f4b059144ad3d873657d00f3001f0bceda6b77 (patch) | |
tree | 8f773a1cd7259168bd3b7717590c005d5e8000b9 /clang/lib/CodeGen/CGRecordLayoutBuilder.cpp | |
parent | e448942b76b50d72542f34a7e773030eda939292 (diff) | |
download | bcm5719-llvm-b6f4b059144ad3d873657d00f3001f0bceda6b77.tar.gz bcm5719-llvm-b6f4b059144ad3d873657d00f3001f0bceda6b77.zip |
IRgen: Fix CGRecordLayout::print to print the bit-field infos in a consistent order.
llvm-svn: 102044
Diffstat (limited to 'clang/lib/CodeGen/CGRecordLayoutBuilder.cpp')
-rw-r--r-- | clang/lib/CodeGen/CGRecordLayoutBuilder.cpp | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/clang/lib/CodeGen/CGRecordLayoutBuilder.cpp b/clang/lib/CodeGen/CGRecordLayoutBuilder.cpp index fe28495e5da..71d0290548a 100644 --- a/clang/lib/CodeGen/CGRecordLayoutBuilder.cpp +++ b/clang/lib/CodeGen/CGRecordLayoutBuilder.cpp @@ -598,13 +598,26 @@ void CGRecordLayout::print(llvm::raw_ostream &OS) const { OS << " LLVMType:" << *LLVMType << "\n"; OS << " ContainsPointerToDataMember:" << ContainsPointerToDataMember << "\n"; OS << " BitFields:[\n"; + + // Print bit-field infos in declaration order. + std::vector<std::pair<unsigned, const CGBitFieldInfo*> > BFIs; for (llvm::DenseMap<const FieldDecl*, CGBitFieldInfo>::const_iterator it = BitFields.begin(), ie = BitFields.end(); it != ie; ++it) { + const RecordDecl *RD = it->first->getParent(); + unsigned Index = 0; + for (RecordDecl::field_iterator + it2 = RD->field_begin(); *it2 != it->first; ++it2) + ++Index; + BFIs.push_back(std::make_pair(Index, &it->second)); + } + llvm::array_pod_sort(BFIs.begin(), BFIs.end()); + for (unsigned i = 0, e = BFIs.size(); i != e; ++i) { OS.indent(4); - it->second.print(OS); + BFIs[i].second->print(OS); OS << "\n"; } + OS << "]>\n"; } |