[cfe-dev] Traversing CompoundStmt with non-type template parameter

Konstantin Tokarev annulen at yandex.ru
Thu Oct 18 04:21:09 PDT 2012



18.10.2012, 02:09, "Philip Craig" <philipjcraig at gmail.com>:
> On Thu, Oct 18, 2012 at 12:44 AM, Konstantin Tokarev <annulen at yandex.ru> wrote:
>
>>  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?
>
> This is probably a symptom of missing a declaration for printf().
> Check whether there were any errors in parsing.

Thank you very much!

It was the case indeed - stdio.h failed to include.

-- 
Regards,
Konstantin



More information about the cfe-dev mailing list