From: Anders Carlsson Date: Sun, 31 Oct 2010 21:22:43 +0000 (+0000) Subject: Use CharUnits in the EmptyClassOffsets map. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d8da76365f40a0c12c7d802a0da2aaacf4b2cf99;p=clang Use CharUnits in the EmptyClassOffsets map. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@117873 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/AST/RecordLayoutBuilder.cpp b/lib/AST/RecordLayoutBuilder.cpp index 73d534391c..24ddea84d7 100644 --- a/lib/AST/RecordLayoutBuilder.cpp +++ b/lib/AST/RecordLayoutBuilder.cpp @@ -63,7 +63,7 @@ class EmptySubobjectMap { /// EmptyClassOffsets - A map from offsets to empty record decls. typedef llvm::SmallVector ClassVectorTy; - typedef llvm::DenseMap EmptyClassOffsetsMapTy; + typedef llvm::DenseMap EmptyClassOffsetsMapTy; EmptyClassOffsetsMapTy EmptyClassOffsets; /// MaxEmptyClassOffset - The highest offset known to contain an empty @@ -90,6 +90,14 @@ class EmptySubobjectMap { return Offset <= MaxEmptyClassOffset; } + // FIXME: Remove these. + CharUnits toCharUnits(uint64_t Offset) const { + return CharUnits::fromQuantity(Offset / Context.getCharWidth()); + } + uint64_t toOffset(CharUnits Offset) const { + return Offset.getQuantity() * Context.getCharWidth(); + } + protected: bool CanPlaceSubobjectAtOffset(const CXXRecordDecl *RD, uint64_t Offset) const; @@ -183,7 +191,8 @@ EmptySubobjectMap::CanPlaceSubobjectAtOffset(const CXXRecordDecl *RD, if (!RD->isEmpty()) return true; - EmptyClassOffsetsMapTy::const_iterator I = EmptyClassOffsets.find(Offset); + EmptyClassOffsetsMapTy::const_iterator I = + EmptyClassOffsets.find(toCharUnits(Offset)); if (I == EmptyClassOffsets.end()) return true; @@ -201,7 +210,7 @@ void EmptySubobjectMap::AddSubobjectAtOffset(const CXXRecordDecl *RD, if (!RD->isEmpty()) return; - ClassVectorTy& Classes = EmptyClassOffsets[Offset]; + ClassVectorTy& Classes = EmptyClassOffsets[toCharUnits(Offset)]; assert(std::find(Classes.begin(), Classes.end(), RD) == Classes.end() && "Duplicate empty class detected!");