[cfe-dev] Traversing CompoundStmt with non-type template parameter
Konstantin Tokarev
annulen at yandex.ru
Wed Oct 17 07:44:27 PDT 2012
Hi all,
I'm trying to visit "param" in context 2:
template<int param> // 1
class B
{
public:
static void hello() { printf("%d\n", param); } // 2
};
When I run clang -cc1 -ast-dump I get
template <int param> class B {
class B;
public:
static void hello() (CompoundStmt 0x2918628 <class_template3.cpp:7:25, col:50>
(CallExpr 0x29185b0 <col:27, col:47> 'int'
(ImplicitCastExpr 0x2918598 <col:27> 'int (*)(const char *restrict, ...)' <FunctionToPointerDecay>
(DeclRefExpr 0x2918510 <col:27> 'int (const char *restrict, ...)' lvalue Function 0x29079d0 'printf' 'int (const char *restrict, ...)'))
(ImplicitCastExpr 0x2918610 <col:34> 'const char *' <ArrayToPointerDecay>
(StringLiteral 0x29184b8 <col:34> 'const char [4]' lvalue "%d\n"))
(DeclRefExpr 0x29184e8 <col:42> 'int' NonTypeTemplateParm 0x2917e70 'param' 'int')))
where (DeclRefExpr 0x29184e8 <col:42> 'int' NonTypeTemplateParm 0x2917e70 'param' 'int') is what I'm looking for.
However my reimplementation of VisitDeclRefExpr in RecursiveASTVisitor doesn't receive this DeclRefExpr.
Dumping TemplateDecl corresponding to B results in
template <int param> class B {
class B;
public:
static void hello() (CompoundStmt 0x1f86430 <class_template3.cpp:7:25, col:50>)
}
i.e. CompoundStmt is not traversed. Its size() returns 0 and dump() doesn't show anything inside it. How do I traverse inside this CompoundStmt?
--
Regards,
Konstantin
More information about the cfe-dev
mailing list