[cfe-dev] AST visiting and DeclRefExpr

Sam Parker S.Parker3 at lboro.ac.uk
Fri Oct 18 06:56:32 PDT 2013


I'm playing with a recursive AST, and I want to visit all the 
DeclRefExprs and record them. I have been able to do this successfully, 
by overloading VisitDeclRefExpr, except for this section:

bool isValid = IN_RANGE(tx, validXmin, validXmax);

if (isValid)
     validBuffer[get_global_id(0)] = true;

Where the AST looks like this:

(DeclStmt 0x5003680 <line:67:2, col:51>
     (0x5003410 "bool isValid =
       (ParenExpr 0x5003660 <line:1:31, col:56> '_Bool'
         (BinaryOperator 0x5003638 <col:32, col:55> '_Bool' '&&'
           (BinaryOperator 0x5003528 <col:32, col:41> '_Bool' '>='
             (ImplicitCastExpr 0x50034f8 <col:32, col:34> 'int' 
               (ParenExpr 0x5003490 <col:32, col:34> 'int' lvalue
                 (DeclRefExpr 0x5003468 <line:67:26> 'int' lvalue Var 
0x5002000 'tx' 'int')))
             (ImplicitCastExpr 0x5003510 <line:1:37, col:41> 'int' 
               (ParenExpr 0x50034d8 <col:37, col:41> 'int' lvalue
                 (DeclRefExpr 0x50034b0 <line:67:30> 'int' lvalue Var 
0x5002860 'validXmin' 'int'))))
           (BinaryOperator 0x5003610 <line:1:46, col:55> '_Bool' '<='
             (ImplicitCastExpr 0x50035e0 <col:46, col:48> 'int' 
               (ParenExpr 0x5003578 <col:46, col:48> 'int' lvalue
                 (DeclRefExpr 0x5003550 <line:67:26> 'int' lvalue Var 
0x5002000 'tx' 'int')))
             (ImplicitCastExpr 0x50035f8 <line:1:51, col:55> 'int' 
               (ParenExpr 0x50035c0 <col:51, col:55> 'int' lvalue
                 (DeclRefExpr 0x5003598 <line:67:41> 'int' lvalue Var 
0x5002a40 'validXmax' 'int'))))))"))
   (IfStmt 0x5003868 <line:69:2, line:70:35>
     (ImplicitCastExpr 0x50036c0 <line:69:6> '_Bool' <LValueToRValue>
       (DeclRefExpr 0x5003698 <col:6> '_Bool' lvalue Var 0x5003410 
'isValid' '_Bool'))
     (BinaryOperator 0x5003840 <line:70:3, col:35> '_Bool' lvalue '='
       (ArraySubscriptExpr 0x5003800 <col:3, col:31> '_Bool' lvalue
         (ImplicitCastExpr 0x50037e8 <col:3> '_Bool *' <LValueToRValue>
           (DeclRefExpr 0x50036d8 <col:3> '_Bool *' lvalue ParmVar 
0x5001940 'validBuffer' '_Bool *'))
         (CallExpr 0x50037b8 <col:15, col:30> 'int'
           (ImplicitCastExpr 0x50037a0 <col:15> 'int (*)(int)' 
             (DeclRefExpr 0x5003778 <col:15> 'int (int)' lvalue Function 
0x5000d90 'get_global_id' 'int (int)'))
           (IntegerLiteral 0x5003758 <col:29> 'int' 0)))
       (CXXBoolLiteralExpr 0x5003828 <col:35> '_Bool' true))

My problem is that isValid in the if condition is not visited here. 
isValid is visited if i use a variable to store the result from 
get_global_id and use it to id the array, what is the reason for this?

Many thanks,

Sam Parker
Research Student
Electronic Systems Design Group
School of Electronic and Systems Engineering
Loughborough University

More information about the cfe-dev mailing list