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 | ad759530ff48385255c25e71d7e05632361e0c11 (patch) | |
tree | 7a1b3440706f455a06744b7a26569f400034b8ad /lib/CodeGen/CGRecordLayoutBuilder.cpp | |
parent | d4b2853cec72abdaa6821aabc372d538dfbc2429 (diff) |
IRgen: Fix CGRecordLayout::print to print the bit-field infos in a consistent order.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@102044 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/CGRecordLayoutBuilder.cpp')
-rw-r--r-- | lib/CodeGen/CGRecordLayoutBuilder.cpp | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/lib/CodeGen/CGRecordLayoutBuilder.cpp b/lib/CodeGen/CGRecordLayoutBuilder.cpp index fe28495e5d..71d0290548 100644 --- a/lib/CodeGen/CGRecordLayoutBuilder.cpp +++ b/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"; } |