[cfe-dev] Problem in SLocEntry creation

Argyrios Kyrtzidis kyrtzidis at apple.com
Wed Dec 19 15:59:59 PST 2012


On Dec 19, 2012, at 2:00 PM, Abramo Bagnara <abramo.bagnara at bugseng.com> wrote:

> $ cat file.c
> #define WINDOW win
> #include "file.h"
> $ cat file.h
> #define P_(args)	args
> extern void f P_((WINDOW win));
> $ clang -c file.c
> error: unknown type name 'win'
> ./file.h:1:18: note: expanded from macro 'P_'
> #define P_(args)        args
>                        ^
> 1 error generated.
> 
> It seems that when the spelling location for 'win' is computed we end up
> into an expansion SLocEntry despite we start from a file SLocEntry.
> 
> This is the dump of relevant SLocEntry:
> 
> 4: file 12275-12329 name:./file.h iloc:30
> 5: macro 2147495978-2147495982 exp:12311-12326 sloc:12292 text:args
> 6: macro 2147495983-2147495986 exp:12315-12315 sloc:17 text:win
> 7: arg 2147495987-2147496011 exp:2147495978-2147495978 sloc:12314
> text:(WINDOW win));
> 
> The location for 'win' is 2147496008, i.e. fid 7 and offset 21, if we
> sum that offset to base spelling loc 12314 + 21 = 12335, but this offset
> belong to fid 6 that is not a file SLocEntry.
> 
> So we get as spelling loc a file loc that is erroneously inside an
> expansion SLocEntry, this produces the effect to obtain an invalid loc
> that confuse diagnostics, so that, as you can see above, no
> file:line:column is shown before "error:".
> 
> Do you know what might be the reason for that and/or what is the correct
> remediation?


This was due to "merging" macro argument tokens into one SLocEntry chunk, a token from a file should not be combined with one from an expansion.

Thanks for the test case! Fixed in r170616.

> 
> -- 
> Abramo Bagnara
> 
> BUGSENG srl - http://bugseng.com
> mailto:abramo.bagnara at bugseng.com




More information about the cfe-dev mailing list