[cfe-dev] Repeated expression in AST
Abramo Bagnara
abramo.bagnara at gmail.com
Sun Jan 1 10:47:06 PST 2012
Ping^2.
Il 17/12/2011 09:48, Abramo Bagnara ha scritto:
> 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.
>
>
--
Abramo Bagnara
Opera Unica Phone: +39.0546.656023
Via Borghesi, 16
48014 Castel Bolognese (RA) - Italy
More information about the cfe-dev
mailing list