From 7f20ea7d7b9ab1b21147c58bec6491ce5ba7f816 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Thu, 18 Jul 2002 03:01:24 +0000 Subject: [PATCH] Only functions with external linkage can be resolved to function declarations. This change fixes programs that have multiple functions named the same thing, where are least one of them is static/internal. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@2954 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Transforms/IPO/FunctionResolution.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/lib/Transforms/IPO/FunctionResolution.cpp b/lib/Transforms/IPO/FunctionResolution.cpp index 6cb901b79fe..683512689e3 100644 --- a/lib/Transforms/IPO/FunctionResolution.cpp +++ b/lib/Transforms/IPO/FunctionResolution.cpp @@ -122,8 +122,11 @@ bool FunctionResolvingPass::run(Module &M) { SymbolTable::VarMap &Plane = I->second; for (SymbolTable::type_iterator PI = Plane.begin(), PE = Plane.end(); PI != PE; ++PI) { - const string &Name = PI->first; - Functions[Name].push_back(cast(PI->second)); + Function *F = cast(PI->second); + assert(PI->first == F->getName() && + "Function name and symbol table do not agree!"); + if (F->hasExternalLinkage()) // Only resolve decls to external fns + Functions[PI->first].push_back(F); } } @@ -139,6 +142,7 @@ bool FunctionResolvingPass::run(Module &M) { Function *Concrete = 0; for (unsigned i = 0; i < Functions.size(); ) { if (!Functions[i]->isExternal()) { // Found an implementation + if (Implementation != 0) assert(Implementation == 0 && "Multiple definitions of the same" " function. Case not handled yet!"); Implementation = Functions[i]; -- 2.34.1