On 08/01/2014 07:59 AM, Marek Polacek wrote:

Thanks for taking this on, sorry it's taken so long to respond.

+convert_like_real (location_t loc, conversion *convs, tree expr, tree fn,
+                  int argnum, int inner, bool issue_conversion_warnings,
                   bool c_cast_p, tsubst_flags_t complain)
  {
    tree totype = convs->type;
    diagnostic_t diag_kind;
    int flags;
-  location_t loc = EXPR_LOC_OR_LOC (expr, input_location);

I'm afraid I think this will be a regression for many callers: for instance, with a ?: expression this will change conversion diagnostics to have the same location as the ?: as a whole rather than the location of the subexpression being converted. Same for build_new_op_1, and all the calls where now you pass input_location.

Furthermore, the arguments should have their own locations in EXPR_LOCATION; I don't think we need to track them separately. If their locations are wrong that's something to fix directly, rather than adding a special case for function arguments.

So I think I'd like to drop the arg_loc/convert_like changes from this patch.

+             pedwarn (loc, 0, "deducing %qT as %qT",

+             if (permerror (loc, "passing %qT as %<this%> "

These should use the location of the argument, not the call.

There are also a lot of added uses of input_location, which makes me uncomfortable. For build_operator_new_call and build_new_1, I think we want the location of the 'new' token. For build_op_call_1, we can use the '(', and so on.

Jason

Reply via email to