[cfe-dev] RecursiveASTVisitor: VisitTypeOfExprType doesn't get called

Manuel Klimek klimek at google.com
Thu Aug 16 06:50:49 PDT 2012


On Thu, Aug 16, 2012 at 3:34 PM, Sergejs Belajevs
<sergejs.belajevs at gmail.com> wrote:
> Hi,
>
> I am using clang for a source-to-source transformation tool and as a
> part of the whole process, I am using RecursiveASTVisitor for variable
> renaming, specifically, VisitVarDecl and VisitDeclRefExpr. While
> testing it on open-source project, found the following code:
>
> test.c:
>
> int status = 0;
> ...
> status = ((((__extension__ (((union { __typeof(status) __in; int __i;
> }) { .__in = (status) }).__i))) & 0xff00) >> 8);
>
> Original code is compiled without errors (by C compiler), but not my
> transformed code. The problem is that all occurrences of "status" are
> renamed. All but one, which is inside "__typeof()" inside anonymous
> union inside __extension__. I added also "VisitTypeOfExprType" to my
> resursive AST visitor and it never got called on this code. However,
> when I tried it on the following code:
>
> status = ({ union { __typeof(status) __in; int __i; } a; a.__in =
> status; (a.__i & 0xff00) >> 8; });
>
> I got a call to VisitTypeOfExprType. All occurrences of status are
> also correctly renamed by my transformation tool for this piece of
> code.
>
> Can somebody help me to get my renaming working also for the first
> case with "__extension__"? Am I doing something wrong or is this a
> bug?

Gut feeling would be that this is a bug in RAV, but I think that needs
some more investigation. Please open a bug so we track it.

Thanks for reporting,
/Manuel



>
>
> Thanks,
> Sergejs
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev



More information about the cfe-dev mailing list