On Tue, Apr 15, 2014 at 09:53:16PM +0100, Richard Sandiford wrote: > As Robert pointed out here: > > http://gcc.gnu.org/ml/gcc-patches/2014-04/msg00416.html > > we're a bit too eager when folding stuff into an 'X' constraint. > The value at expand time is sensible, but after that asm_operand_ok > allows arbitrary rtx expressions, including any number of registers > as well as MEMs with unchecked addresses. > > This is a target-independent problem, as shown by the testcase below. > Reload would give bogus "impossible constraint in asm" errors > while LRA ICEs. > > Tested on x86_64-linux-gnu. OK to install?
But then what will be "X" good for compared to "gin" or similar? X constraint is meant for operands that aren't really needed, trying to print is a user error. I guess the documentation agrees with this: 'X' Any operand whatsoever is allowed, even if it does not satisfy 'general_operand'. This is normally used in the constraint of a 'match_scratch' when certain alternatives will not actually require a scratch register. So I think we should just error out if somebody tries to print something that satisfies X constraint. Jakub