From 4fb07802084848cebc5a0925542f8799b655324c Mon Sep 17 00:00:00 2001 From: Richard Sandiford Date: Sat, 13 Apr 2002 09:33:01 +0000 Subject: [PATCH] * gcc.dg/asm-6.c, * g++.dg/ext/asm1.C: New tests. From-SVN: r52270 --- gcc/testsuite/ChangeLog | 5 +++ gcc/testsuite/g++.dg/ext/asm1.C | 56 +++++++++++++++++++++++++++++++++ gcc/testsuite/gcc.dg/asm-6.c | 7 +++++ 3 files changed, 68 insertions(+) create mode 100644 gcc/testsuite/g++.dg/ext/asm1.C create mode 100644 gcc/testsuite/gcc.dg/asm-6.c diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d3391f0dbcc..66df3d09fef 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2002-04-13 Richard Sandiford + + * gcc.dg/asm-6.c, + * g++.dg/ext/asm1.C: New tests. + 2002-04-12 Mark Mitchell PR c++ 5373. diff --git a/gcc/testsuite/g++.dg/ext/asm1.C b/gcc/testsuite/g++.dg/ext/asm1.C new file mode 100644 index 00000000000..8a010eee068 --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/asm1.C @@ -0,0 +1,56 @@ +// Check that the 3.1 named operand syntax can be used in template functions. + +struct arg1 { + int value; + static const int info = 99; +}; + +struct arg2 { + int value; + static const int info = 11; +}; + +template +int foo (void) +{ + int i; + asm ("# foo on %[third] %[second] %[fourth] %[first]" + : [first] "=r" (i) + : [second] "i" (j), + [third] "i" (j + 2), + [fourth] "i" (100)); + return i; +}; + +template +TYPE bar (TYPE t) +{ + asm ("# bar on %[first] %[second] %[third]" + : [first] "=r" (t.value) + : [second] "i[first]" (t.value), + [third] "i" (t.info)); + return t; +} + +template +struct S { + static void frob (TYPE t) + { + asm ("# frob on %[arg]" :: [arg] "i" (t.info)); + } +}; + +void test () +{ + arg1 x; + arg2 y; + + foo<42> (); + bar (x); + bar (y); + S::frob (x); +} + +// { dg-final { scan-assembler "foo on" } } +// { dg-final { scan-assembler "bar on" } } +// { dg-final { scan-assembler "frob on" } } diff --git a/gcc/testsuite/gcc.dg/asm-6.c b/gcc/testsuite/gcc.dg/asm-6.c new file mode 100644 index 00000000000..9c0ac1eb27e --- /dev/null +++ b/gcc/testsuite/gcc.dg/asm-6.c @@ -0,0 +1,7 @@ +/* Check error messages for named asm operands. */ +void foo () +{ + int i; + __asm__ ("" : [data] "=r" (i) : [data] "i" (100)); /* { dg-error "duplicate asm operand" } */ + __asm__ ("%[foo]" :: [bar] "i" (1)); /* { dg-error "undefined named operand" } */ +} -- 2.30.2