aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Analysis/CallGraph.cpp
AgeCommit message (Collapse)AuthorFilesLines
2017-01-27[analyzer] Consider function call arguments while building CallGraph.Artem Dergachev1-0/+1
Function call can appear in the arguments of another function call, eg.: foo(bar()); This patch adds support for such cases. Patch by Ivan Sidorenko! Differential revision: https://reviews.llvm.org/D28905 llvm-svn: 293280
2016-12-12[StaticAnalysis] Remove unnecessary parameter in CallGraphNode::addCallee.Haojian Wu1-2/+2
Summary: Remove the CallGraph in addCallee as it is not used in addCallee. It decouples addCallee from CallGraph, so that we can use CallGraphNode within our customized CallGraph. Reviewers: bkramer Subscribers: cfe-commits, ioeric Differential Revision: https://reviews.llvm.org/D27674 llvm-svn: 289431
2016-10-10[Analysis] Use unique_ptr for CallGraph::FunctionMap.Justin Lebar1-9/+7
Reviewers: timshen Subscribers: cfe-commits Differential Revision: https://reviews.llvm.org/D25427 llvm-svn: 283775
2016-01-29Annotate dump() methods with LLVM_DUMP_METHOD, addressing Richard Smith ↵Yaron Keren1-2/+2
r259192 post commit comment. llvm-svn: 259232
2015-07-02Switch users of the 'for (StmtRange range = stmt->children(); range; ↵Benjamin Kramer1-3/+3
++range)‘ pattern to range for loops. The pattern was born out of the lack of range-based for loops in C++98 and is somewhat obscure. No functionality change intended. llvm-svn: 241300
2015-06-22Revert r240270 ("Fixed/added namespace ending comments using clang-tidy").Alexander Kornienko1-1/+1
llvm-svn: 240353
2015-06-22Fixed/added namespace ending comments using clang-tidy. NFCAlexander Kornienko1-1/+1
The patch is generated using this command: $ tools/extra/clang-tidy/tool/run-clang-tidy.py -fix \ -checks=-*,llvm-namespace-comment -header-filter='llvm/.*|clang/.*' \ work/llvm/tools/clang To reduce churn, not touching namespaces spanning less than 10 lines. llvm-svn: 240270
2014-12-17[CallGraph] Make sure the edges are not missed due to re-declarationsAnna Zaks1-8/+5
A patch by Daniel DeFreez! We were previously dropping edges on re-declarations. Store the canonical declarations in the graph to ensure that different references to the same function end up reflected with the same call graph node. (Note, this might lead to performance fluctuation because call graph is used to determine the function analysis order.) llvm-svn: 224398
2014-05-20[C++11] Use 'nullptr'. Analysis edition.Craig Topper1-5/+5
llvm-svn: 209191
2014-04-22[Modules] Fix potential ODR violations by sinking the DEBUG_TYPEChandler Carruth1-2/+2
definition below all of the header #include lines, clang edition. If you want more details about this, you can see some of the commits to Debug.h in LLVM recently. This is just the clang section of a cleanup I've done for all uses of DEBUG_TYPE in LLVM. llvm-svn: 206849
2014-03-07[C++11] Replacing DeclBase iterators decls_begin() and decls_end() with ↵Aaron Ballman1-3/+2
iterator_range decls(). The same is true for the noload versions of these APIs. Updating all of the usages of the iterators with range-based for loops. llvm-svn: 203278
2014-02-19Use llvm::DeleteContainerSeconds when possibleReid Kleckner1-6/+1
llvm-svn: 201739
2012-12-21[analyzer] Fix typos.Anna Zaks1-2/+2
llvm-svn: 170907
2012-12-21[analyzer] Re-apply r170826 and make the dumping of the GallGraphAnna Zaks1-13/+16
deterministic. Commit message for r170826: [analyzer] Traverse the Call Graph in topological order. Modify the call graph by removing the parentless nodes. Instead all nodes are children of root to ensure they are all reachable. Remove the tracking of nodes that are "top level" or global. This information is not used and can be obtained from the Decls stored inside CallGraphNodes. Instead of existing ordering hacks, analyze the functions in topological order over the Call Graph. Together with the addition of devirtualizable ObjC message sends and blocks to the call graph, this gives around 6% performance improvement on several large ObjC benchmarks. llvm-svn: 170906
2012-12-21Revert r170826. The output ofRafael Espindola1-2/+8
./bin/clang -cc1 -internal-isystem /home/espindola/llvm/build/lib/clang/3.3/include/ -analyze -analyzer-checker=debug.DumpCallGraph /home/espindola/llvm/clang/test/Analysis/debug-CallGraph.c -fblocks changes in each run. llvm-svn: 170829
2012-12-21[analyzer] Traverse the Call Graph in topological order.Anna Zaks1-8/+2
Modify the call graph by removing the parentless nodes. Instead all nodes are children of root to ensure they are all reachable. Remove the tracking of nodes that are "top level" or global. This information is not used and can be obtained from the Decls stored inside CallGraphNodes. Instead of existing ordering hacks, analyze the functions in topological order over the Call Graph. Together with the addition of devirtualizable ObjC message sends and blocks to the call graph, this gives around 6% performance improvement on several large ObjC benchmarks. llvm-svn: 170826
2012-12-21[analyzer] Add blocks and ObjC messages to the call graph.Anna Zaks1-14/+67
This paves the road for constructing a better function dependency graph. If we analyze a function before the functions it calls and inlines, there is more opportunity for optimization. Note, we add call edges to the called methods that correspond to function definitions (declarations with bodies). llvm-svn: 170825
2012-12-04Sort all of Clang's files under 'lib', and fix up the broken headersChandler Carruth1-2/+0
uncovered. This required manually correcting all of the incorrect main-module headers I could find, and running the new llvm/utils/sort_includes.py script over the files. I also manually added quite a few missing headers that were uncovered by shuffling the order or moving headers up to be main-module-headers. llvm-svn: 169237
2012-06-06Remove unused private member variables found by clang's new ↵Benjamin Kramer1-4/+3
-Wunused-private-field. llvm-svn: 158086
2012-04-12[analyzer] PCH deserialization optimization.Anna Zaks1-61/+32
We should not deserialize unused declarations from the PCH file. Achieve this by storing the top level declarations during parsing (HandleTopLevelDecl ASTConsumer callback) and analyzing/building a call graph only for those. Tested the patch on a sample ObjC file that uses PCH. With the patch, the analyzes is 17.5% faster and clang consumes 40% less memory. Got about 10% overall build/analyzes time decrease on a large Objective C project. A bit of CallGraph refactoring/cleanup as well.. llvm-svn: 154625
2012-04-05Do not crash in the callgraph construction when encountering deleted ↵Ted Kremenek1-1/+2
function definitions. Fixes <rdar://problem/11178609>. llvm-svn: 154081
2012-03-14Fix dereference of end iterator. Spotted by ASan.Matt Beaumont-Gay1-1/+3
llvm-svn: 152738
2012-03-13[analyzer] Refactor CallGraph to use Recursive AST visitor whenAnna Zaks1-36/+32
collecting function Decls. llvm-svn: 152651
2012-03-09CallGraph: Add getNode() method, constify.Anna Zaks1-0/+4
llvm-svn: 152439
2012-03-08Call Graph: Only the root node is allowed to have an invalid Decl*.Anna Zaks1-1/+4
llvm-svn: 152350
2012-03-08Remove stray semi-colon.Daniel Dunbar1-1/+1
llvm-svn: 152331
2012-03-08Add a basic CallGraph to Analysis.Anna Zaks1-0/+207
The final graph contains a single root node, which is a parent of all externally available functions(and 'main'). As well as a list of Parentless/Unreachable functions, which are either truly unreachable or are unreachable due to our analyses imprecision. The analyzer checkers debug.DumpCallGraph or debug.ViewGraph can be used to look at the produced graph. Currently, the graph is not very precise, for example, it entirely skips edges resulted from ObjC method calls. llvm-svn: 152272
2009-12-03Fix layering violation by moving Analysis/CallGraph to IndexDaniel Dunbar1-150/+0
llvm-svn: 90424
2009-11-30Adapt to the DOTGraphTraits changes in LLVM.Tobias Grosser1-1/+3
llvm-svn: 90137
2009-11-14Change *BugReport constructors to take StringRefs.Benjamin Kramer1-1/+1
- Eliminates many calls to std::string.c_str() - Fixes an invalid read in ReturnStackAddressChecker due to an unsafe call to StringRef.data() which doesn't guarantee null-termination. llvm-svn: 88779
2009-10-28make CallGraph more flexible by letting it accept ASTContext instead of ASTUnit.Zhongxing Xu1-3/+1
Patch by Simone Pellegrini. llvm-svn: 85386
2009-09-29Modify ASTLocation and apart from being a Decl or Stmt, allow it to also be:Argyrios Kyrtzidis1-4/+1
-A NamedDecl reference -A TypeLoc llvm-svn: 83095
2009-09-29Add more const-goodness to ASTLocation.Argyrios Kyrtzidis1-1/+1
llvm-svn: 83087
2009-09-09Remove tabs, and whitespace cleanups.Mike Stump1-9/+9
llvm-svn: 81346
2009-07-24Add getDecl() to CallGraph and CallGraphNode.Zhongxing Xu1-0/+7
llvm-svn: 76940
2009-07-23Add two nodes to the call graph:Zhongxing Xu1-0/+12
- Root is the main function or 0. - ExternalCallingNode has edges to all external functions. llvm-svn: 76876
2009-07-23Add template specializations to view the call graph in dot format.Zhongxing Xu1-0/+21
- change the DenseMap used in callgraph to std::map, since DenseMap cannot be used with mapped_iterator and friends. llvm-svn: 76874
2009-07-21Remove the ASTContext parameter from Entity::getPrintableName().Argyrios Kyrtzidis1-3/+2
llvm-svn: 76546
2009-07-21Change the semantics for Entity.Argyrios Kyrtzidis1-6/+6
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
2009-07-18Replace stmt visitors with the fall back method.Zhongxing Xu1-21/+1
llvm-svn: 76294
2009-07-17Rename Entity::getName() to Entity::getPrintableName() to make its purposeZhongxing Xu1-2/+3
more obvious. llvm-svn: 76167
2009-07-17As suggested by Argyrios, revert r76159 and make "FindImmediateParent" Zhongxing Xu1-1/+4
a public static method of ASTLocation. llvm-svn: 76166
2009-07-17Refactor code into a new CallExpr::getDirectCallee() method. Simplify someZhongxing Xu1-15/+4
code with the new method. llvm-svn: 76164
2009-07-17CallGraph: add a bunch of stmt visitors.Zhongxing Xu1-6/+20
llvm-svn: 76161
2009-07-17CallGraph:Zhongxing Xu1-6/+12
- add IfStmt visitor. - print information only when a function has callee. Otherwise its ASTContext map is NULL. llvm-svn: 76156
2009-07-16Commit the initial implementation of call graph building.Zhongxing Xu1-0/+121
llvm-svn: 75873