RFA: Improve message for wrong number of alternatives
Richard Sandiford
richard.sandiford@arm.com
Mon May 17 10:20:23 GMT 2021
Joern Rennecke <joern.rennecke@embecosm.com> writes:
> On Sun, 16 May 2021 at 22:01, Martin Sebor <msebor@gmail.com> wrote:
> > I think it's very helpful to provide this sort of detail. Just as
>> a matter of readability, the new error message
>>
>> "wrong number of alternatives in operand %d, %d, expected %d"
>>
>> would be improved by avoiding the two consecutive %d's,
>
> We could also do that by phrasing it:
>
> "wrong number of alternatives in operand %d, seen: %d, expected: %d"
>
> so that the change is just about adding extra information.
>
>> e.g., by
>> rephrasing it like so:
>>
>> "%d alternatives provided to operand %d where %d are expected"
>
> This has an additional change in that we no longer jump to the conclusion
> that the operand where we notice the discrepancy is the point that's wrong.
> I suppose that conclusion is more often right than wrong (assuming more than
> two operands on average for patterns that have alternatives and at least two
> operands), but when it's wrong, it's particularly confusing and/or jarring,
> so it's an improvement to just stick to the known facts.
> But if we go that way, I suppose we should spell also out where the
> expectation comes from: we have a loop over the operands, and we look at
> operand 0 first. We could do that by using the diagnostic:
>
> error_at (d->loc,
> "alternative number mismatch: operand %d has
> %d, operand %d had %d",
> start, d->operand[start].n_alternatives, 0, n);
>
>
> I notice in passing here that printf is actually awkward for repharasings
> and hence also for translations, because we can't interchange the order of
> the data in the message string.
>
> But for multi-alternative patterns, we also have the awkwardness of
> repeating the abstract of the error message and the recap of the number
> of alternatives of operand 0.
>
> So I propose the attached patch now.
>
> Bootstrapped on x86_64-pc-linux-gnu.
>
> 2021-05-17 Joern Rennecke <joern.rennecke@embecosm.com>
>
> Make "wrong number of alternatives" message more specific, and
> remove assumption on where the problem is.
>
> diff --git a/gcc/genoutput.c b/gcc/genoutput.c
> index 8e911cce2f5..6313b722cf7 100644
> --- a/gcc/genoutput.c
> +++ b/gcc/genoutput.c
> @@ -757,6 +757,7 @@ validate_insn_alternatives (class data *d)
> int which_alternative = 0;
> int alternative_count_unsure = 0;
> bool seen_write = false;
> + bool alt_mismatch = false;
>
> for (p = d->operand[start].constraint; (c = *p); p += len)
> {
> @@ -813,8 +814,19 @@ validate_insn_alternatives (class data *d)
> if (n == 0)
> n = d->operand[start].n_alternatives;
> else if (n != d->operand[start].n_alternatives)
> - error_at (d->loc, "wrong number of alternatives in operand %d",
> - start);
> + {
> + if (!alt_mismatch)
> + {
> + alt_mismatch = true;
> + error_at (d->loc,
> + "alternative number mismatch: "
> + "operand %d had %d, operand %d has %d",
> + 0, n, start, d->operand[start].n_alternatives);
IMO this is better with s/had/has/. OK with that change, thanks.
Richard
> + }
> + else
> + error_at (d->loc, "operand %d has %d alternatives",
> + start, d->operand[start].n_alternatives);
> + }
> }
> }
>
More information about the Gcc-patches
mailing list