[cfe-dev] libtooling fails to traverse TranslationUnitDecl
xiaohui chen
xchen198812 at gmail.com
Sun Dec 28 21:46:37 PST 2014
HI there:
My clang is 3.4.1 . I have a very simple libtooling code which just visit
the functiondecl.
but function "bool VisitFunctionDecl(FunctionDecl *func)" is never called
in line 35, who can answer me?
please see the following output, even i can output the AST in line 53.
===============================================================================
llvm/tools/clang/tools/example$ ./Example test.c --
TranslationUnitDecl 0x3225610 <<invalid sloc>><look for declarations>
|-TypedefDecl 0x3225b20 <<invalid sloc>> __int128_t '__int128'<look for
declarations>
|-TypedefDecl 0x3225b80 <<invalid sloc>> __uint128_t 'unsigned
__int128'<look for declarations>
|-TypedefDecl 0x3225ed0 <<invalid sloc>> __builtin_va_list '__va_list_tag
[1]'<look for declarations>
`-FunctionDecl 0x3225f70
</home/xiaohui/llvm/llvm/tools/clang/tools/example/test.c:1:1, line:2:1>
do_math 'void ()'
`-CompoundStmt 0x3226018 <line:1:16, line:2:1>
Found 0 functions.
===============================================================================
1 #include "clang/Driver/Options.h"
2 #include "clang/AST/AST.h"
3 #include "clang/AST/ASTContext.h"
4 #include "clang/AST/ASTConsumer.h"
5 #include "clang/AST/RecursiveASTVisitor.h"
6 #include "clang/Frontend/ASTConsumers.h"
7 #include "clang/Frontend/FrontendActions.h"
8 #include "clang/Frontend/CompilerInstance.h"
9 #include "clang/Tooling/CommonOptionsParser.h"
10 #include "clang/Tooling/Tooling.h"
11 #include "clang/Rewrite/Core/Rewriter.h"
12 #include "llvm/Support/raw_ostream.h"
13
14 using namespace std;
15 using namespace clang;
16 using namespace clang::driver;
17 using namespace clang::tooling;
18 using namespace llvm;
19
20 Rewriter rewriter;
21 int numFunctions = 0;
22
23
24 class ExampleVisitor : public RecursiveASTVisitor<ExampleVisitor> {
25 private:
26 ASTContext *astContext; // used for getting additional AST info
27
28 public:
29 explicit ExampleVisitor(CompilerInstance *CI)
30 : astContext(&(CI->getASTContext())) // initialize private members
31 {
32 rewriter.setSourceMgr(astContext->getSourceManager(),
astContext->getLangOpts());
33 }
34
35 bool VisitFunctionDecl(FunctionDecl *func) {
36 numFunctions++;
37 return true;
38 }
39 };
40
41 class ExampleASTConsumer : public ASTConsumer {
42 private:
43 ExampleVisitor *visitor; // doesn't have to be private
44
45 public:
46 // override the constructor in order to pass CI
47 explicit ExampleASTConsumer(CompilerInstance *CI)
48 : visitor(new ExampleVisitor(CI)) // initialize the visitor
49 { }
50
51 // override this to call our ExampleVisitor on the entire source
file
52 virtual void HandleTranslationUnit(ASTContext &Context) {
53 Context.getTranslationUnitDecl()->dump();
54
55 visitor->TraverseDecl(Context.getTranslationUnitDecl());
56 }
57
58 };
59
60 class ExampleFrontendAction : public ASTFrontendAction {
61 public:
62 virtual ASTConsumer *CreateASTConsumer(CompilerInstance &CI,
StringRef file) {
63 return new ExampleASTConsumer(&CI); // pass CI pointer to
ASTConsumer
64 }
65 };
66
67 int main(int argc, const char **argv) {
68 CommonOptionsParser op(argc, argv);
69 ClangTool Tool(op.getCompilations(), op.getSourcePathList());
70
71 int result =
Tool.run(newFrontendActionFactory<ExampleFrontendAction>());
72
73 errs() << "\nFound " << numFunctions << " functions.\n\n";
74 return result;
75 }
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20141228/f5659ab2/attachment.html>
More information about the cfe-dev
mailing list