aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorUros Bizjak <ubizjak@gmail.com>2021-10-18 17:03:28 +0200
committerUros Bizjak <ubizjak@gmail.com>2021-10-18 17:04:26 +0200
commit4abc0c196b10251dc80d0743ba9e8ab3e56c61ed (patch)
treecc396d73f897d4a278ad53e3f0cdbbcd5066de9b /gcc
parent582d43a48cb28e6ed36ea6388ca92f3d5d786a26 (diff)
downloadgcc-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.c5
-rw-r--r--gcc/testsuite/gcc.target/i386/pr102761.c11
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" } */
+}