From 9ca4c1bf082a4691482ca9f4814fea68f04e2cb3 Mon Sep 17 00:00:00 2001 From: Fangrui Song Date: Tue, 30 Jan 2024 20:41:12 -0800 Subject: [PATCH] RISC-V: Add tests for constraints "i" and "s" The constraints "i" and "s" can be used with a symbol that binds externally, e.g. ``` namespace ns { extern int var, a[4]; } void foo() { asm(".pushsection .xxx,\"aw\"; .dc.a %0; .popsection" :: "s"(&ns::var)); asm(".reloc ., BFD_RELOC_NONE, %0" :: "s"(&ns::a[3])); } ``` gcc/testsuite/ChangeLog: * gcc.target/riscv/asm-raw-symbol.c: New test. --- gcc/testsuite/gcc.target/riscv/asm-raw-symbol.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 gcc/testsuite/gcc.target/riscv/asm-raw-symbol.c diff --git a/gcc/testsuite/gcc.target/riscv/asm-raw-symbol.c b/gcc/testsuite/gcc.target/riscv/asm-raw-symbol.c new file mode 100644 index 00000000000..28305a8b1f0 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/asm-raw-symbol.c @@ -0,0 +1,14 @@ +/* { dg-do compile } */ +/* { dg-options "-fpic" } */ + +extern int var, arr[2][2]; + +void +test (void) +{ + __asm__ ("@ %0" : : "i"(&var)); + __asm__ ("@ %0 %1 %2" : : "s"(&var), "s"(&arr[1][1]), "s"(test)); +} + +/* { dg-final { scan-assembler "@ var arr\\+12 test" } } */ +/* { dg-final { scan-assembler "@ var" } } */