aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRobert Bowdidge <bowdidge@gcc.gnu.org>2003-10-21 16:45:26 -0700
committerRobert Bowdidge <bowdidge@gcc.gnu.org>2003-10-21 16:45:26 -0700
commitc599a7afeaaf36fcef77e1a2f9537579254efd7b (patch)
treef1ea21b9a14102908ffddd672d444f9726494cce /gcc
parente3939998cf09380d0b5f114aa4f79ae92e6b02a2 (diff)
downloadgcc-c599a7afeaaf36fcef77e1a2f9537579254efd7b.zip
gcc-c599a7afeaaf36fcef77e1a2f9537579254efd7b.tar.gz
gcc-c599a7afeaaf36fcef77e1a2f9537579254efd7b.tar.bz2
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/testsuite/g++.dg/ext/asmspecInvalid.C18
-rw-r--r--gcc/testsuite/g++.dg/ext/asmspecValid.C43
2 files changed, 61 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.dg/ext/asmspecInvalid.C b/gcc/testsuite/g++.dg/ext/asmspecInvalid.C
new file mode 100644
index 0000000..4c528a0
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ext/asmspecInvalid.C
@@ -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;
+}
diff --git a/gcc/testsuite/g++.dg/ext/asmspecValid.C b/gcc/testsuite/g++.dg/ext/asmspecValid.C
new file mode 100644
index 0000000..98d98b4
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ext/asmspecValid.C
@@ -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" } } */