diff options
author | Uros Bizjak <ubizjak@gmail.com> | 2021-10-18 17:03:28 +0200 |
---|---|---|
committer | Uros Bizjak <ubizjak@gmail.com> | 2021-10-18 17:04:26 +0200 |
commit | 4abc0c196b10251dc80d0743ba9e8ab3e56c61ed (patch) | |
tree | cc396d73f897d4a278ad53e3f0cdbbcd5066de9b /gcc | |
parent | 582d43a48cb28e6ed36ea6388ca92f3d5d786a26 (diff) | |
download | gcc-4abc0c196b10251dc80d0743ba9e8ab3e56c61ed.zip gcc-4abc0c196b10251dc80d0743ba9e8ab3e56c61ed.tar.gz gcc-4abc0c196b10251dc80d0743ba9e8ab3e56c61ed.tar.bz2 |
i386: Fix ICE in ix86_print_opreand_address [PR 102761]
2021-10-18 Uroš Bizjak <ubizjak@gmail.com>
PR target/102761
gcc/ChangeLog:
* config/i386/i386.c (ix86_print_operand_address):
Error out for non-address_operand asm operands.
gcc/testsuite/ChangeLog:
* gcc.target/i386/pr102761.c: New test.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/config/i386/i386.c | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/pr102761.c | 11 |
2 files changed, 15 insertions, 1 deletions
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 3c3336d..f111411 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -13921,7 +13921,10 @@ ix86_print_operand_address_as (FILE *file, rtx addr, static void ix86_print_operand_address (FILE *file, machine_mode /*mode*/, rtx addr) { - ix86_print_operand_address_as (file, addr, ADDR_SPACE_GENERIC, false); + if (this_is_asm_operands && ! address_operand (addr, VOIDmode)) + output_operand_lossage ("invalid constraints for operand"); + else + ix86_print_operand_address_as (file, addr, ADDR_SPACE_GENERIC, false); } /* Implementation of TARGET_ASM_OUTPUT_ADDR_CONST_EXTRA. */ diff --git a/gcc/testsuite/gcc.target/i386/pr102761.c b/gcc/testsuite/gcc.target/i386/pr102761.c new file mode 100644 index 0000000..58ff27e --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr102761.c @@ -0,0 +1,11 @@ +/* PR target/102761 */ +/* { dg-do compile } */ +/* { dg-options "-O1" } */ + +int foo (void); + +void +bar (void) +{ + asm volatile ("%a0" : : "X"(foo () ? 2 : 1)); /* { dg-error "invalid constraints for operand" } */ +} |