On Tue, Dec 22, 2015 at 12:26:29PM -0500, David Malcolm wrote:
> Currently, trunk emits this for a bad unary * in C:
> 
> bad-dereference.c:10:10: error: invalid type argument of unary ‘*’ (have 
> ‘int’)
>    return *some_f.x;
>           ^
> 
> The following patch fixes the reported location to highlight the
> expression that was attempted to be dereferenced:
> 
> bad-dereference.c:10:10: error: invalid type argument of unary ‘*’ (have 
> ‘int’)
>    return *some_f.x;
>           ^~~~~~~~~
> 
> Based on another example from:
>   http://clang.llvm.org/diagnostics.html
> albeit within the "Precision in Wording" example; I didn't change the
> wording.

fwiw gcc's wording seems better to me.

> +++ b/gcc/c/c-parser.c
> @@ -6691,8 +6691,12 @@ c_parser_unary_expression (c_parser *parser)
>        op = c_parser_cast_expression (parser, NULL);
>        finish = op.get_finish ();
>        op = convert_lvalue_to_rvalue (exp_loc, op, true, true);
> -      ret.value = build_indirect_ref (op_loc, op.value, RO_UNARY_STAR);
> -      set_c_expr_source_range (&ret, op_loc, finish);
> +      {

I'd find these braces less confusing if they were for the entire case
not just part of it.

Trev

Reply via email to