i386: Fix up z operand modifier diagnostics on inline-asm [PR109458]
authorJakub Jelinek <jakub@redhat.com>
Wed, 12 Apr 2023 14:53:23 +0000 (16:53 +0200)
committerJakub Jelinek <jakub@redhat.com>
Wed, 12 Apr 2023 14:53:23 +0000 (16:53 +0200)
commit4073ce2c4e5584c1be58fbe76dd66285de2529bb
tree086630be3d58c3d7d0c01952019573ba0e92d291
parent3beeebd6934654f3453209730b98c7a1fd0305b6
i386: Fix up z operand modifier diagnostics on inline-asm [PR109458]

On the following testcase, we emit weird diagnostics.
User used the z modifier, but diagnostics talks about Z instead.
This is because z is implemented by doing some stuff and then falling
through into the Z case.

The following patch adjusts the Z diagnostics, such that it prints whatever
modifier user actually uses in places which could happen with either
modifier.

Furthermore, in case of the non-integer operand used with operand code %<z%>
warning the warning location was incorrect (and of function), so I've used
warning_for_asm to get it a proper location in case it is a user inline-asm.

2023-04-12  Jakub Jelinek  <jakub@redhat.com>

PR target/109458
* config/i386/i386.cc: Include rtl-error.h.
(ix86_print_operand): For z modifier warning, use warning_for_asm
if this_is_asm_operands.  For Z modifier errors, use %c and code
instead of hardcoded Z.

* gcc.target/i386/pr109458.c: New test.
gcc/config/i386/i386.cc
gcc/testsuite/gcc.target/i386/pr109458.c [new file with mode: 0644]