forked from OSchip/llvm-project
Fix a problem where we not marking incoming arguments to functions with
external linkage as incomplete. llvm-svn: 20927
This commit is contained in:
parent
db45f7d763
commit
2e1971c19d
|
@ -1657,7 +1657,8 @@ void DSGraph::markIncompleteNodes(unsigned Flags) {
|
||||||
for (ReturnNodesTy::iterator FI = ReturnNodes.begin(), E =ReturnNodes.end();
|
for (ReturnNodesTy::iterator FI = ReturnNodes.begin(), E =ReturnNodes.end();
|
||||||
FI != E; ++FI) {
|
FI != E; ++FI) {
|
||||||
Function &F = *FI->first;
|
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()))
|
if (isPointerType(I->getType()))
|
||||||
markIncompleteNode(getNodeForValue(I).getNode());
|
markIncompleteNode(getNodeForValue(I).getNode());
|
||||||
markIncompleteNode(FI->second.getNode());
|
markIncompleteNode(FI->second.getNode());
|
||||||
|
|
|
@ -167,14 +167,22 @@ bool Steens::runOnModule(Module &M) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove our knowledge of what the return values of the functions are.
|
// Remove our knowledge of what the return values of the functions are, except
|
||||||
ResultGraph->getReturnNodes().clear();
|
// 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
|
// Update the "incomplete" markers on the nodes, ignoring unknownness due to
|
||||||
// incoming arguments...
|
// incoming arguments...
|
||||||
ResultGraph->maskIncompleteMarkers();
|
ResultGraph->maskIncompleteMarkers();
|
||||||
ResultGraph->markIncompleteNodes(DSGraph::IgnoreFormalArgs |
|
ResultGraph->markIncompleteNodes(DSGraph::IgnoreGlobals |
|
||||||
DSGraph::IgnoreGlobals);
|
DSGraph::MarkFormalArgs);
|
||||||
|
|
||||||
// Remove any nodes that are dead after all of the merging we have done...
|
// 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!
|
// FIXME: We should be able to disable the globals graph for steens!
|
||||||
|
|
Loading…
Reference in New Issue