diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2009-07-21 00:07:06 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2009-07-21 00:07:06 +0000 |
commit | 05ac8276cfc37ac89bb46551e1aa7617295ab341 (patch) | |
tree | 52b23e8ce8cd01437a93042cbd02baf559e01a80 /clang/lib/Analysis/CallGraph.cpp | |
parent | ed73cac647942fb08c052d466e054027a7790d63 (diff) | |
download | bcm5719-llvm-05ac8276cfc37ac89bb46551e1aa7617295ab341.tar.gz bcm5719-llvm-05ac8276cfc37ac89bb46551e1aa7617295ab341.zip |
Change the semantics for Entity.
Entity can now refer to declarations that are not visible outside the translation unit.
It is a wrapper of a pointer union, it's either a Decl* for declarations that don't
"cross" translation units, or an EntityImpl* which is associated with the specific "visible" Decl.
Included is a test case for handling fields across translation units.
llvm-svn: 76515
Diffstat (limited to 'clang/lib/Analysis/CallGraph.cpp')
-rw-r--r-- | clang/lib/Analysis/CallGraph.cpp | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/clang/lib/Analysis/CallGraph.cpp b/clang/lib/Analysis/CallGraph.cpp index cf8f6205abe..2530fc0ad74 100644 --- a/clang/lib/Analysis/CallGraph.cpp +++ b/clang/lib/Analysis/CallGraph.cpp @@ -25,12 +25,12 @@ class CGBuilder : public StmtVisitor<CGBuilder> { CallGraph &G; FunctionDecl *FD; - Entity *CallerEnt; + Entity CallerEnt; CallGraphNode *CallerNode; public: - CGBuilder(CallGraph &g, FunctionDecl *fd, Entity *E, CallGraphNode *N) + CGBuilder(CallGraph &g, FunctionDecl *fd, Entity E, CallGraphNode *N) : G(g), FD(fd), CallerEnt(E), CallerNode(N) {} void VisitStmt(Stmt *S) { VisitChildren(S); } @@ -47,7 +47,7 @@ public: void CGBuilder::VisitCallExpr(CallExpr *CE) { if (FunctionDecl *CalleeDecl = CE->getDirectCallee()) { - Entity *Ent = Entity::get(CalleeDecl, G.getProgram()); + Entity Ent = Entity::get(CalleeDecl, G.getProgram()); CallGraphNode *CalleeNode = G.getOrInsertFunction(Ent); Decl *Parent = ASTLocation::FindImmediateParent(FD, CE); @@ -75,7 +75,7 @@ void CallGraph::addTU(ASTUnit &AST) { if (FunctionDecl *FD = dyn_cast<FunctionDecl>(*I)) { if (FD->isThisDeclarationADefinition()) { // Set caller's ASTContext. - Entity *Ent = Entity::get(FD, Prog); + Entity Ent = Entity::get(FD, Prog); CallGraphNode *Node = getOrInsertFunction(Ent); CallerCtx[Node] = &Ctx; @@ -86,7 +86,7 @@ void CallGraph::addTU(ASTUnit &AST) { } } -CallGraphNode *CallGraph::getOrInsertFunction(Entity *F) { +CallGraphNode *CallGraph::getOrInsertFunction(Entity F) { CallGraphNode *&Node = FunctionMap[F]; if (Node) return Node; @@ -98,7 +98,7 @@ void CallGraph::print(llvm::raw_ostream &os) { for (iterator I = begin(), E = end(); I != E; ++I) { if (I->second->hasCallee()) { ASTContext &Ctx = *CallerCtx[I->second]; - os << "function: " << I->first->getPrintableName(Ctx).c_str() + os << "function: " << I->first.getPrintableName(Ctx).c_str() << " calls:\n"; for (CallGraphNode::iterator CI = I->second->begin(), CE = I->second->end(); CI != CE; ++CI) { |