Author: Yingwei Zheng Date: 2025-05-30T14:46:35+08:00 New Revision: 1a5bf4c6b40399f8cf6dc0293dc0743cdfd28c2b
URL: https://github.com/llvm/llvm-project/commit/1a5bf4c6b40399f8cf6dc0293dc0743cdfd28c2b DIFF: https://github.com/llvm/llvm-project/commit/1a5bf4c6b40399f8cf6dc0293dc0743cdfd28c2b.diff LOG: Revert "[IR] Avoid UB in `SymbolTableListTraits` (#139096)" This reverts commit 1e81e800508fbec5bdd394754e6005af536aa2f3. Added: Modified: llvm/include/llvm/IR/BasicBlock.h llvm/include/llvm/IR/Function.h llvm/include/llvm/IR/Module.h llvm/include/llvm/IR/SymbolTableListTraits.h Removed: ################################################################################ diff --git a/llvm/include/llvm/IR/BasicBlock.h b/llvm/include/llvm/IR/BasicBlock.h index 10617db09fde6..9ee0bacb5c258 100644 --- a/llvm/include/llvm/IR/BasicBlock.h +++ b/llvm/include/llvm/IR/BasicBlock.h @@ -546,10 +546,6 @@ class BasicBlock final : public Value, // Basic blocks are data objects also return &BasicBlock::InstList; } - static size_t getSublistOffset(Instruction *) { - return offsetof(BasicBlock, InstList); - } - /// Dedicated function for splicing debug-info: when we have an empty /// splice (i.e. zero instructions), the caller may still intend any /// debug-info in between the two "positions" to be spliced. diff --git a/llvm/include/llvm/IR/Function.h b/llvm/include/llvm/IR/Function.h index 63100568d07e4..6d4a53da7ff22 100644 --- a/llvm/include/llvm/IR/Function.h +++ b/llvm/include/llvm/IR/Function.h @@ -811,10 +811,6 @@ class LLVM_ABI Function : public GlobalObject, public ilist_node<Function> { return &Function::BasicBlocks; } - static size_t getSublistOffset(BasicBlock *) { - return offsetof(Function, BasicBlocks); - } - public: const BasicBlock &getEntryBlock() const { return front(); } BasicBlock &getEntryBlock() { return front(); } diff --git a/llvm/include/llvm/IR/Module.h b/llvm/include/llvm/IR/Module.h index a305dd99962c0..0dc8164b9c950 100644 --- a/llvm/include/llvm/IR/Module.h +++ b/llvm/include/llvm/IR/Module.h @@ -608,9 +608,6 @@ class LLVM_ABI Module { static GlobalListType Module::*getSublistAccess(GlobalVariable*) { return &Module::GlobalList; } - static size_t getSublistOffset(GlobalVariable *) { - return offsetof(Module, GlobalList); - } friend class llvm::SymbolTableListTraits<llvm::GlobalVariable>; public: @@ -621,9 +618,6 @@ class LLVM_ABI Module { static FunctionListType Module::*getSublistAccess(Function*) { return &Module::FunctionList; } - static size_t getSublistOffset(Function *) { - return offsetof(Module, FunctionList); - } /// Detach \p Alias from the list but don't delete it. void removeAlias(GlobalAlias *Alias) { AliasList.remove(Alias); } @@ -663,9 +657,6 @@ class LLVM_ABI Module { static AliasListType Module::*getSublistAccess(GlobalAlias*) { return &Module::AliasList; } - static size_t getSublistOffset(GlobalAlias *) { - return offsetof(Module, AliasList); - } friend class llvm::SymbolTableListTraits<llvm::GlobalAlias>; /// Get the Module's list of ifuncs (constant). @@ -676,9 +667,6 @@ class LLVM_ABI Module { static IFuncListType Module::*getSublistAccess(GlobalIFunc*) { return &Module::IFuncList; } - static size_t getSublistOffset(GlobalIFunc *) { - return offsetof(Module, IFuncList); - } friend class llvm::SymbolTableListTraits<llvm::GlobalIFunc>; /// Get the Module's list of named metadata (constant). diff --git a/llvm/include/llvm/IR/SymbolTableListTraits.h b/llvm/include/llvm/IR/SymbolTableListTraits.h index 456833fff62ce..fcf6f0fb15280 100644 --- a/llvm/include/llvm/IR/SymbolTableListTraits.h +++ b/llvm/include/llvm/IR/SymbolTableListTraits.h @@ -77,8 +77,10 @@ class SymbolTableListTraits : public ilist_alloc_traits<ValueSubClass> { /// getListOwner - Return the object that owns this list. If this is a list /// of instructions, it returns the BasicBlock that owns them. ItemParentClass *getListOwner() { - size_t Offset = ItemParentClass::getSublistOffset( - static_cast<ValueSubClass *>(nullptr)); + size_t Offset = reinterpret_cast<size_t>( + &((ItemParentClass *)nullptr->*ItemParentClass::getSublistAccess( + static_cast<ValueSubClass *>( + nullptr)))); ListTy *Anchor = static_cast<ListTy *>(this); return reinterpret_cast<ItemParentClass*>(reinterpret_cast<char*>(Anchor)- Offset); _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits