On Thu, 2018-02-15 at 14:01 +0000, Richard Earnshaw (lists) wrote: > > Wouldn't it be better to call output_operand_lossage() with a suitable > diagnostic message? If the operand isn't in Pmode assembly will > (should) fail anyway. > > R.
How about this patch? In addtion to the code change I updated asm-2.c with the error message that you getin ILP32 mode and I added asm-4.c which does not give an error message in either LP64 or ILP32 mode. Steve Ellcey sell...@cavium.com 2018-02-16 Steve Ellcey <sell...@cavium.com> PR target/83335 * config/aarch64/aarch64.c (aarch64_print_address_internal): Change gcc_assert call to output_operand_lossage. diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c index 7c9c6e5..34b75f8 100644 --- a/gcc/config/aarch64/aarch64.c +++ b/gcc/config/aarch64/aarch64.c @@ -7044,7 +7044,8 @@ aarch64_print_address_internal (FILE *f, machine_mode mode, rtx x, unsigned int size; /* Check all addresses are Pmode - including ILP32. */ - gcc_assert (GET_MODE (x) == Pmode); + if (GET_MODE (x) != Pmode) + output_operand_lossage ("invalid address mode"); if (aarch64_classify_address (&addr, x, mode, true, type)) switch (addr.type) 2018-02-16 Steve Ellcey <sell...@cavium.com> PR target/83335 * gcc/testsuite/gcc.target/aarch64/asm-2.c: Add dg-error for ILP32 mode. * gcc/testsuite/gcc.target/aarch64/asm-4.c: New test. diff --git a/gcc/testsuite/gcc.target/aarch64/asm-2.c b/gcc/testsuite/gcc.target/aarch64/asm-2.c index 3f978f5..65b3a84 100644 --- a/gcc/testsuite/gcc.target/aarch64/asm-2.c +++ b/gcc/testsuite/gcc.target/aarch64/asm-2.c @@ -6,5 +6,5 @@ int x; void f (void) { - asm volatile ("%a0" :: "X" (&x)); + asm volatile ("%a0" :: "X" (&x)); /* { dg-error "invalid address mode" "" { target ilp32 } } */ } diff --git a/gcc/testsuite/gcc.target/aarch64/asm-4.c b/gcc/testsuite/gcc.target/aarch64/asm-4.c index e69de29..abe2af5 100644 --- a/gcc/testsuite/gcc.target/aarch64/asm-4.c +++ b/gcc/testsuite/gcc.target/aarch64/asm-4.c @@ -0,0 +1,10 @@ +/* { dg-do compile } */ +/* { dg-options "-O0" } */ + +int x; + +void +f (void) +{ + asm volatile ("%a0" :: "X" (__builtin_extend_pointer (&x))); +}