Check that asm specs are handled correctly in structure and class field declarations.

Correct behavior is that these are permitted on static fields (because only one
instance exists) and are not permitted on non-static fields.  In the case of
static fields, check to make sure the assembler output shows the aliased name
somewhere.

From-SVN: r72777
This commit is contained in:
Robert Bowdidge 2003-10-21 16:45:26 -07:00
parent e3939998cf
commit c599a7afea
2 changed files with 61 additions and 0 deletions

View File

@ -0,0 +1,18 @@
// tests that the asm directive is correctly handled for static fields
// in structures and classes. This only applies to C++; such
// directives generate errors in C. Assembler directives for local
// variables should be tested by the C test suite.
//
// Contributed by Robert Bowdidge (bowdidge@apple.com) 14 Oct 2003
// { dg-do compile }
struct Foo {
// This should reference a variable called bar
int i __asm__("bar"); /* { dg-error "specifiers are not permitted" } */
};
int main (void ) {
int j = 0;
return j;
}

View File

@ -0,0 +1,43 @@
// tests that the asm directive is correctly handled for static fields
// in structures and classes. This only applies to C++; such
// directives generate errors in C. Assembler directives for local
// variables should be tested by the C test suite.
//
// Contributed by Robert Bowdidge (bowdidge@apple.com) 14 Oct 2003
// { dg-do compile }
struct Foo {
// This should reference a variable called bar
static int i __asm__("bar");
};
class Bar {
public:
static int i __asm__("theRealI");
static int j __asm__("theRealJ");
int boof;
};
class Baz : public Bar {
public:
static char *ptr __asm__ ("theRealString");
};
int main (int argc, char **argv) {
struct Foo myFoo;
Bar b;
myFoo.i = 1;
Foo::i = 2;
Baz::j = 10;
Baz::ptr = 0;
b.i = 1;
return (b.i);
}
/* { dg-final {scan-assembler "bar"} } */
/* { dg-final {scan-assembler "theRealString"} } */
/* { dg-final {scan-assembler "theRealI" } } */
/* { dg-final {scan-assembler "theRealJ" } } */