[cfe-dev] Problems in __builtin_offsetof locations

John McCall rjmccall at apple.com
Wed Nov 4 02:41:05 PST 2009


Abramo Bagnara wrote:
> The attached C source show two different problems:
>
> $ llvm_new/Debug/bin/clang-cc -W -Wall bug_clang2.c
> bug_clang2.c:11:7: error: too many arguments to function call
>   fun(333);
>   ~~~ ^~~
> bug_clang2.c:12:7: error: too many arguments to function call
>   fun(__builtin_offsetof(struct s, g));
>   ~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> bug_clang2.c:13:7: error: too many arguments to function call
>   fun(__builtin_offsetof(struct s, f));
>   ~~~ ^
> 3 diagnostics generated.
>
>
> 1) As seen in diagnostic for line 12, the end location of
> __builtin_offsetof is not the right paren but the end of location of
> subexpression (like in all other prefix unary operators). This is wrong
> for __builtin_offsetof.
>   

Good catch.  This seems to be a fault in what Sema gets passed from the 
parser.

> 2) Worse in diagnostic for line 13, the end location of
> __builtin_offsetof is invalid (here I don't fully understand how this
> happens).
>   

Also a good catch.  This is because we're building an anonymous 
struct/union member access, which ends up being a different code path.

Please file these as a bug.  Patches are welcome, or else I'll look at 
it closer in the morning and see if it admits a quick fix.

John.



More information about the cfe-dev mailing list