[llvm-commits] CVS: llvm/lib/Transforms/IPO/FunctionResolution.cpp

Chris Lattner lattner at cs.uiuc.edu
Sat May 31 16:58:00 PDT 2003


Changes in directory llvm/lib/Transforms/IPO:

FunctionResolution.cpp updated: 1.30 -> 1.31

---
Log message:

Fix bug: FunctionResolve/2003-05-31-AllInternalDecls.ll


---
Diffs of the changes:

Index: llvm/lib/Transforms/IPO/FunctionResolution.cpp
diff -u llvm/lib/Transforms/IPO/FunctionResolution.cpp:1.30 llvm/lib/Transforms/IPO/FunctionResolution.cpp:1.31
--- llvm/lib/Transforms/IPO/FunctionResolution.cpp:1.30	Sat May 31 16:08:45 2003
+++ llvm/lib/Transforms/IPO/FunctionResolution.cpp	Sat May 31 16:57:06 2003
@@ -309,6 +309,23 @@
   }
 
   if (Globals.size() > 1) {         // Found a multiply defined global...
+    // If there are no external declarations, and there is at most one
+    // externally visible instance of the global, then there is nothing to do.
+    //
+    bool HasExternal = false;
+    unsigned NumInstancesWithExternalLinkage = 0;
+
+    for (unsigned i = 0, e = Globals.size(); i != e; ++i) {
+      if (Globals[i]->isExternal())
+        HasExternal = true;
+      else if (!Globals[i]->hasInternalLinkage())
+        NumInstancesWithExternalLinkage++;
+    }
+    
+    if (!HasExternal && NumInstancesWithExternalLinkage <= 1)
+      return false;  // Nothing to do?  Must have multiple internal definitions.
+
+
     // We should find exactly one concrete function definition, which is
     // probably the implementation.  Change all of the function definitions and
     // uses to use it instead.





More information about the llvm-commits mailing list