aboutsummaryrefslogtreecommitdiffstats
path: root/include/llvm/SymbolTableListTraits.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/llvm/SymbolTableListTraits.h')
-rw-r--r--include/llvm/SymbolTableListTraits.h9
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);