[llvm-commits] CVS: llvm/lib/Analysis/DataStructure/DataStructure.cpp Steensgaard.cpp

Chris Lattner lattner at cs.uiuc.edu
Tue Mar 29 11:17:15 PST 2005



Changes in directory llvm/lib/Analysis/DataStructure:

DataStructure.cpp updated: 1.235 -> 1.236
Steensgaard.cpp updated: 1.58 -> 1.59
---
Log message:

Fix a problem where we not marking incoming arguments to functions with 
external linkage as incomplete.



---
Diffs of the changes:  (+14 -5)

 DataStructure.cpp |    3 ++-
 Steensgaard.cpp   |   16 ++++++++++++----
 2 files changed, 14 insertions(+), 5 deletions(-)


Index: llvm/lib/Analysis/DataStructure/DataStructure.cpp
diff -u llvm/lib/Analysis/DataStructure/DataStructure.cpp:1.235 llvm/lib/Analysis/DataStructure/DataStructure.cpp:1.236
--- llvm/lib/Analysis/DataStructure/DataStructure.cpp:1.235	Thu Mar 24 18:02:41 2005
+++ llvm/lib/Analysis/DataStructure/DataStructure.cpp	Tue Mar 29 13:16:59 2005
@@ -1657,7 +1657,8 @@
     for (ReturnNodesTy::iterator FI = ReturnNodes.begin(), E =ReturnNodes.end();
          FI != E; ++FI) {
       Function &F = *FI->first;
-      for (Function::arg_iterator I = F.arg_begin(), E = F.arg_end(); I != E; ++I)
+      for (Function::arg_iterator I = F.arg_begin(), E = F.arg_end();
+           I != E; ++I)
         if (isPointerType(I->getType()))
           markIncompleteNode(getNodeForValue(I).getNode());
       markIncompleteNode(FI->second.getNode());


Index: llvm/lib/Analysis/DataStructure/Steensgaard.cpp
diff -u llvm/lib/Analysis/DataStructure/Steensgaard.cpp:1.58 llvm/lib/Analysis/DataStructure/Steensgaard.cpp:1.59
--- llvm/lib/Analysis/DataStructure/Steensgaard.cpp:1.58	Sun Mar 27 15:56:55 2005
+++ llvm/lib/Analysis/DataStructure/Steensgaard.cpp	Tue Mar 29 13:16:59 2005
@@ -167,14 +167,22 @@
     }
   }
 
-  // Remove our knowledge of what the return values of the functions are.
-  ResultGraph->getReturnNodes().clear();
+  // Remove our knowledge of what the return values of the functions are, except
+  // for functions that are externally visible from this module (e.g. main).  We
+  // keep these functions so that their arguments are marked incomplete.
+  for (DSGraph::ReturnNodesTy::iterator I =
+         ResultGraph->getReturnNodes().begin(),
+         E = ResultGraph->getReturnNodes().end(); I != E; )
+    if (I->first->hasInternalLinkage())
+      ResultGraph->getReturnNodes().erase(I++);
+    else
+      ++I;
 
   // Update the "incomplete" markers on the nodes, ignoring unknownness due to
   // incoming arguments...
   ResultGraph->maskIncompleteMarkers();
-  ResultGraph->markIncompleteNodes(DSGraph::IgnoreFormalArgs |
-                                   DSGraph::IgnoreGlobals);
+  ResultGraph->markIncompleteNodes(DSGraph::IgnoreGlobals |
+                                   DSGraph::MarkFormalArgs);
 
   // Remove any nodes that are dead after all of the merging we have done...
   // FIXME: We should be able to disable the globals graph for steens!






More information about the llvm-commits mailing list