On Thu, May 3, 2012 at 5:58 PM, Manuel López-Ibáñez
<lopeziba...@gmail.com> wrote:
> This patch enables caret diagnostics for macro expansions. So now we will get:
>
> /home/manuel/macro-clang.c:2:91: error: invalid operands to binary <
> (have ‘struct mystruct’ and ‘float’)
>  #define MYMAX(A,B) __extension__ ({ __typeof__(A) __a = (A);
> __typeof__(B) __b = (B); __a < __b ? __b : __a; })
>
>                    ^
> /home/manuel/macro-clang.c:2:91: note: in expansion of macro 'MYMAX'
>  #define MYMAX(A,B) __extension__ ({ __typeof__(A) __a = (A);
> __typeof__(B) __b = (B); __a < __b ? __b : __a; })
>
>                    ^
> /home/manuel/macro-clang.c:9:3: note: expanded from here
>   MYMAX(p, f);
>   ^
>
> In my opinion, the macro unwinder is too verbose. I think the output
> should be just:
>
> 2.91: error: invalid...
>  #define MYMAX(A,B) __extension__ ({ __typeof__(A) __a = (A);
> __typeof__(B) __b = (B); __a < __b ? __b : __a; })
>
>                    ^
> 9.3: note: in expansion of macro 'MYMAX'
>   MYMAX(p, f);
>   ^
>
> A second option is to use the expansion order, as Clang does:
>
>  t.c:80:3: error: invalid operands to binary expression ('typeof(P)'
> (aka 'struct mystruct') and 'typeof(F)' (aka 'float'))
>    X = MYMAX(P, F);
>        ^~~~~~~~~~~
>  t.c:76:94: note: instantiated from:
>  #define MYMAX(A,B)    __extension__ ({ __typeof__(A) __a = (A);
> __typeof__(B) __b = (B); __a < __b ? __b : __a; })
>
>                    ~~~ ^ ~~~
>
> (Clang calls this "Automatic Macro Expansion", but it is not actually
> expanding the macro, just showing its definition, like this patch
> does.)
>
> However, this is orthogonal to this patch, which simply prints the
> caret and does not change the unwinder. It would be easier to assess
> changes to the unwinder with the caret enabled than without.
>
> Bootstrapped and regression tested.
>
> OK?

The patch changes indentation in several places (violating, I think
coding conventions) which are unrelated to the functionality
that the patch is supposed to implement.  Could you resend
a version unencumbered by those changes for review?
The changes to use pp_get_prefix and pp_set_prefix are OK.

-- Gaby

Reply via email to