diff options
author | Richard Sandiford <rsandifo@redhat.com> | 2002-04-13 09:33:01 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2002-04-13 09:33:01 +0000 |
commit | 4fb07802084848cebc5a0925542f8799b655324c (patch) | |
tree | 57d4b5c5daa9a6d0b208673d8fe74bddd99ab132 | |
parent | fc552851609146aa068cad21f052d10d2552c357 (diff) | |
download | gcc-4fb07802084848cebc5a0925542f8799b655324c.zip gcc-4fb07802084848cebc5a0925542f8799b655324c.tar.gz gcc-4fb07802084848cebc5a0925542f8799b655324c.tar.bz2 |
* gcc.dg/asm-6.c,
* g++.dg/ext/asm1.C: New tests.
From-SVN: r52270
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/ext/asm1.C | 56 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/asm-6.c | 7 |
3 files changed, 68 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d3391f0..66df3d0 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2002-04-13 Richard Sandiford <rsandifo@redhat.com> + + * gcc.dg/asm-6.c, + * g++.dg/ext/asm1.C: New tests. + 2002-04-12 Mark Mitchell <mark@codesourcery.com> 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 0000000..8a010ee --- /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 j> +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<class TYPE> +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<class TYPE> +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<arg1>::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 0000000..9c0ac1e --- /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" } */ +} |