[cfe-dev] Repeated expression in AST

Abramo Bagnara abramo.bagnara at gmail.com
Sat Dec 17 00:48:40 PST 2011


Ping.

Il 11/12/2011 11:13, Abramo Bagnara ha scritto:
> 
> The typescript above shows that clang put *two* references to the same
> expr in the AST (one as TypeOfExprType argument and another as
> CompoundStmt child).
> 
> This leads to shown wrong warning and (I guess) to other problems.
> 
> Is it expected?
> 
> $ cat bug.c
> int f(int);
> void h() {
>   __typeof(*(int (*)[f(1)]) 0) x;
> }
> 
> 
> $ _clang -cc1 -ast-print bug.c
> bug.c:3:12: warning: expression result unused
>   __typeof(*(int (*)[f(1)]) 0) x;
>            ^~~~~~~~~~~~~~~~~~
> struct __va_list_tag {
>     unsigned int gp_offset;
>     unsigned int fp_offset;
>     void *overflow_arg_area;
>     void *reg_save_area;
> };
> typedef struct __va_list_tag __va_list_tag;
> int f(int);
> void h() {
>     (*(int (*)[f(1)])0);
>     typeof (*(int (*)[f(1)])0) x;
> }
> 
> 
> 1 warning generated.
> 
> 
> $ _clang -cc1 -ast-dump bug.c
> bug.c:3:12: warning: expression result unused
>   __typeof(*(int (*)[f(1)]) 0) x;
>            ^~~~~~~~~~~~~~~~~~
> typedef __int128_t __int128_t;
> typedef __uint128_t __uint128_t;
> struct __va_list_tag {
>     unsigned int gp_offset;
>     unsigned int fp_offset;
>     void *overflow_arg_area;
>     void *reg_save_area;
> };
> typedef struct __va_list_tag __va_list_tag;
> typedef __va_list_tag __builtin_va_list[1];
> int f(int);
> void h() (CompoundStmt 0x48a5448 <bug.c:2:10, line:4:1>
>   (ImplicitCastExpr 0x48a5378 <line:3:11, col:30> 'int *'
> <ArrayToPointerDecay>
>     (ParenExpr 0x48a5330 <col:11, col:30> 'int [f(1)]':'int [f(1)]' lvalue
>       (UnaryOperator 0x48a5310 <col:12, col:29> 'int [f(1)]':'int
> [f(1)]' lvalue prefix '*'
>         (CStyleCastExpr 0x48a52e8 <col:13, col:29> 'int (*)[f(1)]'
> <NullToPointer>
>           (IntegerLiteral 0x48a51c0 <col:29> 'int' 0)))))
>   (DeclStmt 0x48a5430 <col:3, col:33>
>     0x48a53d0 "typeof (*(int (*)[f(1)])0) x"))
> 
> 
> 1 warning generated.





More information about the cfe-dev mailing list