Commit 4fb07802 by Richard Sandiford Committed by Richard Sandiford

* gcc.dg/asm-6.c,

	* g++.dg/ext/asm1.C: New tests.

From-SVN: r52270
parent fc552851
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.
......
// 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" } }
/* 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" } */
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment