aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.dg
diff options
context:
space:
mode:
authorMatt Austern <austern@apple.com>2003-12-10 06:34:46 +0000
committerMatt Austern <austern@gcc.gnu.org>2003-12-10 06:34:46 +0000
commitfacef326df0c41371da002b8d5e7716346750f17 (patch)
treee430472ee9dc43efc31173fbf8f2e7bc2d14a17c /gcc/testsuite/gcc.dg
parent5ec3f5662c13c44e04e4f7e6a79ee050d0ba6884 (diff)
downloadgcc-facef326df0c41371da002b8d5e7716346750f17.zip
gcc-facef326df0c41371da002b8d5e7716346750f17.tar.gz
gcc-facef326df0c41371da002b8d5e7716346750f17.tar.bz2
re PR c/13134 (Visibility attribute is ignored)
PR c/13134 * c--decl.c (duplicate_decls): Copy visibility flag when appropriate. * cp/decl.c (duplicate_decls): Copy visibility flag when appropriate. * testsuite/lib/gcc-dg.exp (dg-require-visibility): Define. * testsuite/lib/target-supports (check_visibility_available): Define. * testsuite/gcc.dg/visibility-1.c: New test. * testsuite/gcc.dg/visibility-2.c: Likewise. * testsuite/gcc.dg/visibility-3.c: Likewise. * testsuite/gcc.dg/visibility-4.c: Likewise. * testsuite/gcc.dg/visibility-5.c: Likewise. * testsuite/gcc.dg/visibility-6.c: Likewise. * testsuite/g++.dg/ext/visibility-1.C: Likewise. * testsuite/g++.dg/ext/visibility-2.C: Likewise. * testsuite/g++.dg/ext/visibility-3.C: Likewise. * testsuite/g++.dg/ext/visibility-4.C: Likewise. * testsuite/g++.dg/ext/visibility-5.C: Likewise. * testsuite/g++.dg/ext/visibility-6.C: Likewise. From-SVN: r74487
Diffstat (limited to 'gcc/testsuite/gcc.dg')
-rw-r--r--gcc/testsuite/gcc.dg/visibility-1.c9
-rw-r--r--gcc/testsuite/gcc.dg/visibility-2.c10
-rw-r--r--gcc/testsuite/gcc.dg/visibility-3.c8
-rw-r--r--gcc/testsuite/gcc.dg/visibility-4.c10
-rw-r--r--gcc/testsuite/gcc.dg/visibility-5.c12
-rw-r--r--gcc/testsuite/gcc.dg/visibility-6.c11
-rw-r--r--gcc/testsuite/gcc.dg/visibility-7.c12
7 files changed, 72 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.dg/visibility-1.c b/gcc/testsuite/gcc.dg/visibility-1.c
new file mode 100644
index 0000000..f76c3ca
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/visibility-1.c
@@ -0,0 +1,9 @@
+/* Test visibility attribute on function definition. */
+/* { dg-do compile } */
+/* { dg-require-visibility "" } */
+/* { dg-final { scan-assembler "\\.hidden.*foo" } } */
+
+void
+__attribute__((visibility ("hidden")))
+foo()
+{ }
diff --git a/gcc/testsuite/gcc.dg/visibility-2.c b/gcc/testsuite/gcc.dg/visibility-2.c
new file mode 100644
index 0000000..e62dbbb
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/visibility-2.c
@@ -0,0 +1,10 @@
+/* Test that visibility attribute on declaration extends to definition. */
+/* { dg-do compile } */
+/* { dg-require-visibility "" } */
+/* { dg-final { scan-assembler "\\.hidden.*foo" } } */
+
+void
+__attribute__((visibility ("hidden")))
+foo();
+
+void foo() { }
diff --git a/gcc/testsuite/gcc.dg/visibility-3.c b/gcc/testsuite/gcc.dg/visibility-3.c
new file mode 100644
index 0000000..e0bf01f
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/visibility-3.c
@@ -0,0 +1,8 @@
+/* Test visibility attribute on forward declaration of global variable */
+/* { dg-do compile } */
+/* { dg-require-visibility "" } */
+/* { dg-final { scan-assembler "\\.hidden.*xyzzy" } } */
+
+int
+__attribute__((visibility ("hidden")))
+xyzzy = 5;
diff --git a/gcc/testsuite/gcc.dg/visibility-4.c b/gcc/testsuite/gcc.dg/visibility-4.c
new file mode 100644
index 0000000..1a0b3ca
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/visibility-4.c
@@ -0,0 +1,10 @@
+/* Test visibility attribute on forward declaration of global variable */
+/* { dg-do compile } */
+/* { dg-require-visibility "" } */
+/* { dg-final { scan-assembler "\\.hidden.*xyzzy" } } */
+
+extern int
+__attribute__((visibility ("hidden")))
+xyzzy;
+
+int xyzzy = 5;
diff --git a/gcc/testsuite/gcc.dg/visibility-5.c b/gcc/testsuite/gcc.dg/visibility-5.c
new file mode 100644
index 0000000..b1f46d2
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/visibility-5.c
@@ -0,0 +1,12 @@
+/* Test visibility attribute on definition of a function that has
+ already had a forward declaration. */
+/* { dg-do compile } */
+/* { dg-require-visibility "" } */
+/* { dg-final { scan-assembler "\\.hidden.*foo" } } */
+
+void foo();
+
+void
+ __attribute__((visibility ("hidden")))
+foo()
+{ }
diff --git a/gcc/testsuite/gcc.dg/visibility-6.c b/gcc/testsuite/gcc.dg/visibility-6.c
new file mode 100644
index 0000000..632f2ac
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/visibility-6.c
@@ -0,0 +1,11 @@
+/* Test visibility attribute on definition of global variable that has
+ already had a forward declaration. */
+/* { dg-do compile } */
+/* { dg-require-visibility "" } */
+/* { dg-final { scan-assembler "\\.hidden.*xyzzy" } } */
+
+extern int xyzzy;
+
+int
+__attribute__((visibility ("hidden")))
+xyzzy = 5;
diff --git a/gcc/testsuite/gcc.dg/visibility-7.c b/gcc/testsuite/gcc.dg/visibility-7.c
new file mode 100644
index 0000000..e98b432
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/visibility-7.c
@@ -0,0 +1,12 @@
+/* Test warning from conflicting visibility specifications. */
+/* { dg-do compile } */
+/* { dg-require-visibility "" } */
+/* { dg-final { scan-assembler "\\.hidden.*xyzzy" } } */
+
+extern int
+__attribute__((visibility ("hidden")))
+xyzzy; /* { dg-warning "previous declaration here" "" } */
+
+int
+__attribute__((visibility ("protected")))
+xyzzy = 5; /* { dg-warning "visibility attribute ignored" "" } */