diff options
Diffstat (limited to 'include/llvm/SymbolTableListTraits.h')
-rw-r--r-- | include/llvm/SymbolTableListTraits.h | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/include/llvm/SymbolTableListTraits.h b/include/llvm/SymbolTableListTraits.h index a6d3e6820f..b5ec20de60 100644 --- a/include/llvm/SymbolTableListTraits.h +++ b/include/llvm/SymbolTableListTraits.h @@ -45,8 +45,13 @@ public: /// getListOwner - Return the object that owns this list. If this is a list /// of instructions, it returns the BasicBlock that owns them. ItemParentClass *getListOwner() { - return reinterpret_cast<ItemParentClass*>(reinterpret_cast<char*>(this)- - TraitsClass::getListOffset()); + typedef iplist<ValueSubClass> ItemParentClass::*Sublist; + Sublist Sub(ItemParentClass:: + getSublistAccess(static_cast<ValueSubClass*>(0))); + size_t Offset(size_t(&((ItemParentClass*)0->*Sub))); + iplist<ValueSubClass>* Anchor(static_cast<iplist<ValueSubClass>*>(this)); + return reinterpret_cast<ItemParentClass*>(reinterpret_cast<char*>(Anchor)- + Offset); } void addNodeToList(ValueSubClass *V); |