On Tue, Mar 09, 2021 at 03:26:12PM +0100, Jakub Jelinek via Gcc-patches wrote: > On Tue, Mar 09, 2021 at 09:12:36AM -0500, Vladimir Makarov via Gcc-patches > wrote: > > diff --git a/gcc/lra-constraints.c b/gcc/lra-constraints.c > > index 76e3ff7efe6..feff766c590 100644 > > --- a/gcc/lra-constraints.c > > +++ b/gcc/lra-constraints.c > > @@ -3452,6 +3452,10 @@ process_address_1 (int nop, bool check_only_p, > > > > constraint > > = skip_contraint_modifiers (curr_static_id->operand[nop].constraint); > > + if ('0' <= constraint[0] && constraint[0] <= '9') > > Yoda conditions?
We have IN_RANGE (constraint[0], '0', '9') for this. > Anyway, more importantly, the docs say: > If multiple > digits are encountered consecutively, they are interpreted as a > single decimal integer. There is scant chance for ambiguity, since > to-date it has never been desirable that '10' be interpreted as > matching either operand 1 _or_ operand 0. Should this be desired, > one can use multiple alternatives instead. > so, doesn't this need to use > { > char **end; > unsigned long dup = strtoul (constraint, &end, 10); > constraint > = skip_constraint_modifiers (curr_static_id_operand[dup].constraint); > } > instead? > Otherwise, if you have (even large) testcase that misbehaves with 0-9 > dups, it should be possible to create one with 10-30? > > > + constraint > > + = skip_contraint_modifiers (curr_static_id->operand > > + [constraint[0] - '0'].constraint); > > cn = lookup_constraint (constraint); > > if (insn_extra_address_constraint (cn) > > /* When we find an asm operand with an address constraint that > > > Jakub > Marek