From 73ed196896673dd1e48aa1d3a7f69c514de43adc Mon Sep 17 00:00:00 2001
From: Mark Mitchell <mark@codesourcery.com>
Date: Wed, 4 Jul 2007 17:34:16 +0000
Subject: [PATCH] visibility-12.c: New test.

	* gcc.dg/visibility-12.c: New test.
	* gcc.dg/visibility-13.c: Likewise.
	* g++.dg/ext/visibility-9.C: Likewise.
	* g++.dg/ext/visibility-10.C: Likewise.

From-SVN: r126330
---
 gcc/testsuite/ChangeLog                       | 14 ++++-----
 .../g++.dg/ext/visibility/visibility-10.C     | 19 ++++++++++++
 .../g++.dg/ext/visibility/visibility-9.C      | 29 +++++++++++++++++++
 gcc/testsuite/gcc.dg/visibility-12.c          | 10 +++++++
 gcc/testsuite/gcc.dg/visibility-13.c          | 19 ++++++++++++
 5 files changed, 84 insertions(+), 7 deletions(-)
 create mode 100644 gcc/testsuite/g++.dg/ext/visibility/visibility-10.C
 create mode 100644 gcc/testsuite/g++.dg/ext/visibility/visibility-9.C
 create mode 100644 gcc/testsuite/gcc.dg/visibility-12.c
 create mode 100644 gcc/testsuite/gcc.dg/visibility-13.c

diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 30516ad65c14..63aedcb4b6aa 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,10 @@
+2007-07-04  Mark Mitchell  <mark@codesourcery.com>
+
+	* gcc.dg/visibility-12.c: New test.
+	* gcc.dg/visibility-13.c: Likewise.
+	* g++.dg/ext/visibility-9.C: Likewise.
+	* g++.dg/ext/visibility-10.C: Likewise.
+
 2007-07-04  Richard Sandiford  <richard@codesourcery.com>
 
 	* gcc.dg/sh-relax.c: Skip for VxWorks if non-PIC.
@@ -462,13 +469,6 @@
 	PR fortran/32298
 	* gfortran.dg/minmaxloc_2.f90: New test.
 
-2007-06-23  Mark Mitchell  <mark@codesourcery.com>
-
-	* gcc.dg/visibility-12.c: New test.
-	* gcc.dg/visibility-13.c: Likewise.
-	* g++.dg/ext/visibility-9.C: Likewise.
-	* g++.dg/ext/visibility-10.C: Likewise.
-
 2007-06-23  Richard Guenther  <rguenther@suse.de>
 
 	PR tree-optimization/16876
diff --git a/gcc/testsuite/g++.dg/ext/visibility/visibility-10.C b/gcc/testsuite/g++.dg/ext/visibility/visibility-10.C
new file mode 100644
index 000000000000..312d323092f9
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ext/visibility/visibility-10.C
@@ -0,0 +1,19 @@
+// { dg-require-visibility "" }
+// { dg-require-dll "" }
+
+extern void __attribute__((dllimport, visibility("hidden"))) 
+  f1(); // { dg-error "visibility" }
+extern void __attribute__((visibility("hidden"), dllimport)) 
+  f2(); // { dg-error "visibility" }
+extern void __attribute__((dllexport, visibility("hidden"))) 
+  f3(); // { dg-error "visibility" }
+extern void __attribute__((visibility("hidden"), dllexport)) 
+  f4(); // { dg-error "visibility" }
+extern void __attribute__((visibility("default"), dllimport))
+  f5();
+extern void __attribute__((dllimport, visibility("default")))
+  f6();
+extern void __attribute__((visibility("default"), dllexport))
+  f7();
+extern void __attribute__((dllexport, visibility("default")))
+  f8();
diff --git a/gcc/testsuite/g++.dg/ext/visibility/visibility-9.C b/gcc/testsuite/g++.dg/ext/visibility/visibility-9.C
new file mode 100644
index 000000000000..06b5a17e9425
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ext/visibility/visibility-9.C
@@ -0,0 +1,29 @@
+// Test that dllimport'd functions have default visibility.
+// { dg-require-visibility "" }
+// { dg-require-dll "" }
+// { dg-options "-fvisibility=hidden" }
+// { dg-final { scan-not-hidden "_Z2f1v" } }
+// { dg-final { scan-not-hidden "_ZN1S2f3Ev" } }
+
+extern void  __attribute__((dllimport)) f1();
+void f2() {
+  f1();
+}
+
+struct __attribute__((visibility("hidden")) S1 {
+  __attribute__((dllimport)) void f3();
+};
+
+void f4() {
+  S1 s1;
+  s1.f3();
+}
+
+struct S2 {
+  __attribute__((dllimport)) void f5();
+};
+
+void f6() {
+  S2 s2;
+  s2.f5();
+}
diff --git a/gcc/testsuite/gcc.dg/visibility-12.c b/gcc/testsuite/gcc.dg/visibility-12.c
new file mode 100644
index 000000000000..6012bd9ce243
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/visibility-12.c
@@ -0,0 +1,10 @@
+/* Test that dllimport'd functions have default visibility.  */
+/* { dg-require-visibility "" } */
+/* { dg-require-dll "" } */
+/* { dg-options "-fvisibility=hidden" } */
+/* { dg-final { scan-not-hidden "f1" } } */
+
+extern void  __attribute__((dllimport)) f1();
+void f2() {
+  f1();
+}
diff --git a/gcc/testsuite/gcc.dg/visibility-13.c b/gcc/testsuite/gcc.dg/visibility-13.c
new file mode 100644
index 000000000000..5f7a7c7a0d87
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/visibility-13.c
@@ -0,0 +1,19 @@
+/* { dg-require-visibility "" } */
+/* { dg-require-dll "" } */
+
+extern void __attribute__((dllimport, visibility("hidden"))) 
+  f1(); /* { dg-error "visibility" } */
+extern void __attribute__((visibility("hidden"), dllimport)) 
+  f2(); /* { dg-error "visibility" } */
+extern void __attribute__((dllexport, visibility("hidden"))) 
+  f3(); /* { dg-error "visibility" } */
+extern void __attribute__((visibility("hidden"), dllexport)) 
+  f4(); /* { dg-error "visibility" } */
+extern void __attribute__((visibility("default"), dllimport))
+  f5();
+extern void __attribute__((dllimport, visibility("default")))
+  f6();
+extern void __attribute__((visibility("default"), dllexport))
+  f7();
+extern void __attribute__((dllexport, visibility("default")))
+  f8();
-- 
GitLab