summaryrefslogtreecommitdiff
path: root/gcc/testsuite
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite')
-rw-r--r--gcc/testsuite/ChangeLog27
-rw-r--r--gcc/testsuite/g++.dg/ext/visibility/assign1.C2
-rw-r--r--gcc/testsuite/g++.dg/ext/visibility/fvisibility-inlines-hidden.C2
-rw-r--r--gcc/testsuite/g++.dg/ext/visibility/fvisibility.C2
-rw-r--r--gcc/testsuite/g++.dg/ext/visibility/memfuncts.C2
-rw-r--r--gcc/testsuite/g++.dg/ext/visibility/new1.C5
-rw-r--r--gcc/testsuite/g++.dg/ext/visibility/pragma.C2
-rw-r--r--gcc/testsuite/g++.dg/ext/visibility/staticmemfuncts.C2
-rw-r--r--gcc/testsuite/g++.dg/ext/visibility/virtual.C2
-rw-r--r--gcc/testsuite/g++.dg/ext/visibility/visibility-1.C4
-rw-r--r--gcc/testsuite/g++.dg/ext/visibility/visibility-2.C4
-rw-r--r--gcc/testsuite/g++.dg/ext/visibility/visibility-3.C4
-rw-r--r--gcc/testsuite/g++.dg/ext/visibility/visibility-4.C4
-rw-r--r--gcc/testsuite/g++.dg/ext/visibility/visibility-5.C4
-rw-r--r--gcc/testsuite/g++.dg/ext/visibility/visibility-6.C4
-rw-r--r--gcc/testsuite/g++.dg/ext/visibility/visibility-7.C4
-rw-r--r--gcc/testsuite/g++.dg/ext/visibility/visibility-8.C45
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/dll.x20
-rw-r--r--gcc/testsuite/gcc.dg/dll-2.c4
-rw-r--r--gcc/testsuite/gcc.dg/visibility-10.c19
-rw-r--r--gcc/testsuite/lib/gcc-dg.exp6
-rw-r--r--gcc/testsuite/lib/scanasm.exp26
22 files changed, 145 insertions, 49 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index dd221c85ed0..a04b598e47b 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,30 @@
+2004-08-05 Mark Mitchell <mark@codesourcery.com>
+
+ * g++.dg/ext/visibility/assign1.C: Use scan-hidden and
+ dg-require-visiblity.
+ * g++.dg/ext/visibility/fvisibility-inlines-hidden.C: Likewise.
+ * g++.dg/ext/visibility/fvisibility.C: Likewise.
+ * g++.dg/ext/visibility/memfuncts.C: Likewise.
+ * g++.dg/ext/visibility/new1.C: Likewise.
+ * g++.dg/ext/visibility/pragma.C: Likewise.
+ * g++.dg/ext/visibility/staticmemfuncts.C: Likewise.
+ * g++.dg/ext/visibility/virtual.C: Likewise.
+ * g++/dg/ext/visibility/visibility-1.C: Likewise.
+ * g++/dg/ext/visibility/visibility-2.C: Likewise.
+ * g++/dg/ext/visibility/visibility-3.C: Likewise.
+ * g++/dg/ext/visibility/visibility-4.C: Likewise.
+ * g++/dg/ext/visibility/visibility-5.C: Likewise.
+ * g++/dg/ext/visibility/visibility-6.C: Likewise.
+ * g++/dg/ext/visibility/visibility-7.C: Likewise.
+ * g++/dg/ext/visibility/visibility-8.C: New test.
+ * gcc.c-torture/compile/dll.x: Remove.
+ * gcc.dg/dll-2.c: Use dg-require-dll
+ * gcc.dg/visibility-10.c: New test.
+ * lib/gcc-dg.exp (dg-require-dll): Add Symbian to list of targets
+ supporting DLLs.
+ * testsuite/lib/scanasm.exp (scan_hidden): New function.
+ (scan_not_hidden): Likewise.
+
2004-08-05 David Edelsohn <edelsohn@gnu.org>
* gcc.dg/sh4a-fprun.c: Fix dg-do typo.
diff --git a/gcc/testsuite/g++.dg/ext/visibility/assign1.C b/gcc/testsuite/g++.dg/ext/visibility/assign1.C
index 6d7392fd04b..cbd909ee191 100644
--- a/gcc/testsuite/g++.dg/ext/visibility/assign1.C
+++ b/gcc/testsuite/g++.dg/ext/visibility/assign1.C
@@ -1,6 +1,6 @@
/* { dg-do compile } */
/* { dg-require-visibility "" } */
-/* { dg-final { scan-assembler "\\.hidden.*_ZN1DaSERKS_" } } */
+/* { dg-final { scan-hidden "_ZN1DaSERKS_" } } */
struct B {
B& operator=(const B&);
diff --git a/gcc/testsuite/g++.dg/ext/visibility/fvisibility-inlines-hidden.C b/gcc/testsuite/g++.dg/ext/visibility/fvisibility-inlines-hidden.C
index 4b610229b46..2ee8f0767ba 100644
--- a/gcc/testsuite/g++.dg/ext/visibility/fvisibility-inlines-hidden.C
+++ b/gcc/testsuite/g++.dg/ext/visibility/fvisibility-inlines-hidden.C
@@ -2,7 +2,7 @@
/* { dg-do compile } */
/* { dg-require-visibility "" } */
/* { dg-options "-fvisibility-inlines-hidden" } */
-/* { dg-final { scan-assembler "\\.hidden.*Foo.methodEv" } } */
+/* { dg-final { scan-hidden "_ZN3Foo6methodEv" } } */
class Foo
{
diff --git a/gcc/testsuite/g++.dg/ext/visibility/fvisibility.C b/gcc/testsuite/g++.dg/ext/visibility/fvisibility.C
index fd2c7e2fc3e..4358d25a960 100644
--- a/gcc/testsuite/g++.dg/ext/visibility/fvisibility.C
+++ b/gcc/testsuite/g++.dg/ext/visibility/fvisibility.C
@@ -2,7 +2,7 @@
/* { dg-do compile } */
/* { dg-require-visibility "" } */
/* { dg-options "-fvisibility=hidden" } */
-/* { dg-final { scan-assembler "\\.hidden.*Foo.methodEv" } } */
+/* { dg-final { scan-hidden "_ZN3Foo6methodEv" } } */
class Foo
{
diff --git a/gcc/testsuite/g++.dg/ext/visibility/memfuncts.C b/gcc/testsuite/g++.dg/ext/visibility/memfuncts.C
index 19a5c9d506b..45eb641b29e 100644
--- a/gcc/testsuite/g++.dg/ext/visibility/memfuncts.C
+++ b/gcc/testsuite/g++.dg/ext/visibility/memfuncts.C
@@ -1,7 +1,7 @@
/* Test that setting visibility for class member functions works. */
/* { dg-do compile } */
/* { dg-require-visibility "" } */
-/* { dg-final { scan-assembler "\\.hidden.*Foo.methodEv" } } */
+/* { dg-final { scan-hidden "_ZN3Foo6methodEv" } } */
class __attribute__ ((visibility ("hidden"))) Foo
{
diff --git a/gcc/testsuite/g++.dg/ext/visibility/new1.C b/gcc/testsuite/g++.dg/ext/visibility/new1.C
index 0f0be5148da..ec201cbc20d 100644
--- a/gcc/testsuite/g++.dg/ext/visibility/new1.C
+++ b/gcc/testsuite/g++.dg/ext/visibility/new1.C
@@ -1,7 +1,6 @@
-// { dg-require-visibility }
-// { dg-do compile }
+// { dg-require-visibility "" }
// { dg-options "-fvisibility=hidden" }
-// { dg-final { scan-assembler-not "\\.hidden\[^\n\]*_Znwj" } }
+// { dg-final { scan-not-hidden "_Znwj" } }
void f() {
new int;
diff --git a/gcc/testsuite/g++.dg/ext/visibility/pragma.C b/gcc/testsuite/g++.dg/ext/visibility/pragma.C
index 860b2284e15..98384c9c42a 100644
--- a/gcc/testsuite/g++.dg/ext/visibility/pragma.C
+++ b/gcc/testsuite/g++.dg/ext/visibility/pragma.C
@@ -1,7 +1,7 @@
/* Test that #pragma GCC visibility affects class members. */
/* { dg-do compile } */
/* { dg-require-visibility "" } */
-/* { dg-final { scan-assembler "\\.hidden.*Foo.methodEv" } } */
+/* { dg-final { scan-hidden "_ZN3Foo6methodEv" } } */
#pragma GCC visibility push(hidden)
class Foo
diff --git a/gcc/testsuite/g++.dg/ext/visibility/staticmemfuncts.C b/gcc/testsuite/g++.dg/ext/visibility/staticmemfuncts.C
index b49cbd5bab9..e745caa5a74 100644
--- a/gcc/testsuite/g++.dg/ext/visibility/staticmemfuncts.C
+++ b/gcc/testsuite/g++.dg/ext/visibility/staticmemfuncts.C
@@ -1,7 +1,7 @@
/* Test that setting visibility for static class member functions works. */
/* { dg-do compile } */
/* { dg-require-visibility "" } */
-/* { dg-final { scan-assembler "\\.hidden.*Foo.methodEv" } } */
+/* { dg-final { scan-hidden "_ZN3Foo6methodEv" } } */
class __attribute__ ((visibility ("hidden"))) Foo
{
diff --git a/gcc/testsuite/g++.dg/ext/visibility/virtual.C b/gcc/testsuite/g++.dg/ext/visibility/virtual.C
index 604c552bcb6..746c489d0b1 100644
--- a/gcc/testsuite/g++.dg/ext/visibility/virtual.C
+++ b/gcc/testsuite/g++.dg/ext/visibility/virtual.C
@@ -1,7 +1,7 @@
/* Test that setting visibility for class affects virtual table. */
/* { dg-do compile } */
/* { dg-require-visibility "" } */
-/* { dg-final { scan-assembler "\\.hidden.*ZTV3Foo" } } */
+/* { dg-final { scan-hidden "ZTV3Foo" } } */
class __attribute__ ((visibility ("hidden"))) Foo
{
diff --git a/gcc/testsuite/g++.dg/ext/visibility/visibility-1.C b/gcc/testsuite/g++.dg/ext/visibility/visibility-1.C
index d579eb27206..8ea270bf8c0 100644
--- a/gcc/testsuite/g++.dg/ext/visibility/visibility-1.C
+++ b/gcc/testsuite/g++.dg/ext/visibility/visibility-1.C
@@ -1,6 +1,6 @@
/* Test visibility attribute on function definition. */
-/* { dg-do compile { target *86-*-linux* } } */
-/* { dg-final { scan-assembler "\\.hidden.*_Z3foov" } } */
+/* { dg-require-visibility "" }
+/* { dg-final { scan-hidden "_Z3foov" } } */
void
__attribute__((visibility ("hidden")))
diff --git a/gcc/testsuite/g++.dg/ext/visibility/visibility-2.C b/gcc/testsuite/g++.dg/ext/visibility/visibility-2.C
index 89e853c4dc5..26272abb1f9 100644
--- a/gcc/testsuite/g++.dg/ext/visibility/visibility-2.C
+++ b/gcc/testsuite/g++.dg/ext/visibility/visibility-2.C
@@ -1,6 +1,6 @@
/* Test that visibility attribute on declaration extends to definition. */
-/* { dg-do compile { target *86-*-linux* } } */
-/* { dg-final { scan-assembler "\\.hidden.*_Z3foov" } } */
+/* { dg-require-visibility "" }
+/* { dg-final { scan-hidden "_Z3foov" } } */
void __attribute__((visibility ("hidden"))) foo();
diff --git a/gcc/testsuite/g++.dg/ext/visibility/visibility-3.C b/gcc/testsuite/g++.dg/ext/visibility/visibility-3.C
index d0cc8912efb..e4f499fccb0 100644
--- a/gcc/testsuite/g++.dg/ext/visibility/visibility-3.C
+++ b/gcc/testsuite/g++.dg/ext/visibility/visibility-3.C
@@ -1,6 +1,6 @@
/* Test visibility attribute on forward declaration of global variable */
-/* { dg-do compile { target *86-*-linux* } } */
-/* { dg-final { scan-assembler "\\.hidden.*xyzzy" } } */
+/* { dg-require-visibility "" }
+/* { dg-final { scan-hidden "xyzzy" } } */
int
__attribute__((visibility ("hidden")))
diff --git a/gcc/testsuite/g++.dg/ext/visibility/visibility-4.C b/gcc/testsuite/g++.dg/ext/visibility/visibility-4.C
index d217bc9ec5d..f6765958709 100644
--- a/gcc/testsuite/g++.dg/ext/visibility/visibility-4.C
+++ b/gcc/testsuite/g++.dg/ext/visibility/visibility-4.C
@@ -1,6 +1,6 @@
/* Test visibility attribute on forward declaration of global variable */
-/* { dg-do compile { target *86-*-linux* } } */
-/* { dg-final { scan-assembler "\\.hidden.*xyzzy" } } */
+/* { dg-require-visibility "" }
+/* { dg-final { scan-hidden "xyzzy" } } */
extern int __attribute__ ((visibility ("hidden")))
xyzzy;
diff --git a/gcc/testsuite/g++.dg/ext/visibility/visibility-5.C b/gcc/testsuite/g++.dg/ext/visibility/visibility-5.C
index 9cdc8021e47..592529e665d 100644
--- a/gcc/testsuite/g++.dg/ext/visibility/visibility-5.C
+++ b/gcc/testsuite/g++.dg/ext/visibility/visibility-5.C
@@ -1,7 +1,7 @@
/* Test visibility attribute on definition of a function that has
already had a forward declaration. */
-/* { dg-do compile { target *86-*-linux* } } */
-/* { dg-final { scan-assembler "\\.hidden.*_Z3foov" } } */
+/* { dg-require-visibility "" }
+/* { dg-final { scan-hidden "_Z3foov" } } */
void foo();
diff --git a/gcc/testsuite/g++.dg/ext/visibility/visibility-6.C b/gcc/testsuite/g++.dg/ext/visibility/visibility-6.C
index 6e8f0ce1135..0fecf6b74e9 100644
--- a/gcc/testsuite/g++.dg/ext/visibility/visibility-6.C
+++ b/gcc/testsuite/g++.dg/ext/visibility/visibility-6.C
@@ -1,7 +1,7 @@
/* Test visibility attribute on definition of global variable that has
already had a forward declaration. */
-/* { dg-do compile { target *86-*-linux* } } */
-/* { dg-final { scan-assembler "\\.hidden.*xyzzy" } } */
+/* { dg-require-visibility "" }
+/* { dg-final { scan-hidden "xyzzy" } } */
extern int xyzzy;
diff --git a/gcc/testsuite/g++.dg/ext/visibility/visibility-7.C b/gcc/testsuite/g++.dg/ext/visibility/visibility-7.C
index 40acb72463f..dbd7010d028 100644
--- a/gcc/testsuite/g++.dg/ext/visibility/visibility-7.C
+++ b/gcc/testsuite/g++.dg/ext/visibility/visibility-7.C
@@ -1,6 +1,6 @@
/* Test warning from conflicting visibility specifications. */
-/* { dg-do compile { target *86-*-linux* } } */
-/* { dg-final { scan-assembler "\\.hidden.*xyzzy" } } */
+/* { dg-require-visibility "" } */
+/* { dg-final { scan-hidden "xyzzy" } } */
extern int
__attribute__((visibility ("hidden")))
diff --git a/gcc/testsuite/g++.dg/ext/visibility/visibility-8.C b/gcc/testsuite/g++.dg/ext/visibility/visibility-8.C
new file mode 100644
index 00000000000..f6487263975
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ext/visibility/visibility-8.C
@@ -0,0 +1,45 @@
+// Test that a definition marked with dllexport has default
+// visibility.
+// { dg-require-visibility "" }
+// { dg-require-dll "" }
+// { dg-options "-fvisibility=hidden" }
+// { dg-final { scan-not-hidden "_ZN1A1fEv" } }
+// { dg-final { scan-not-hidden "_Z1gv" } }
+// { dg-final { scan-not-hidden "_Z1hv" } }
+// { dg-final { scan-not-hidden "_ZN1B1iEv" } }
+// { dg-final { scan-not-hidden "_ZN1B1jEv" } }
+// { dg-final { scan-not-hidden "_ZN1A1a" } }
+// { dg-final { scan-not-hidden "_ZN1B1b" } }
+// { dg-final { scan-not-hidden "k" } }
+// { dg-final { scan-not-hidden "l" } }
+
+struct __declspec(dllexport) A {
+ void f();
+ static int a;
+};
+
+void A::f() {}
+
+int A::a;
+
+__declspec(dllexport) void g() {}
+
+__declspec(dllexport) void h();
+void h() {}
+
+struct B {
+ void i();
+ __declspec(dllexport) void j();
+ __declspec(dllexport) static int b;
+};
+
+__declspec(dllexport) void B::i() {}
+
+void B::j() {}
+
+int B::b;
+
+__declspec(dllexport) int k;
+
+__declspec(dllexport) extern int l;
+int l;
diff --git a/gcc/testsuite/gcc.c-torture/compile/dll.x b/gcc/testsuite/gcc.c-torture/compile/dll.x
deleted file mode 100644
index 63a1e180e2c..00000000000
--- a/gcc/testsuite/gcc.c-torture/compile/dll.x
+++ /dev/null
@@ -1,20 +0,0 @@
-# This test examines the attribute support for DLLs.
-# Only COFF/PE formats support DLLs, (plus, as a special case
-# the mcore-elf toolchain), so the code here tries to determine
-# the file format and decide whether the test should be marked
-# as unsupported.
-
-set torture_eval_before_compile {
-
- if ![istarget "mcore-*-elf"] {
-
- set objformat [gcc_target_object_format]
-
- if { $objformat != "pe" } {
- unsupported "dll.c"
- return 1
- }
- }
-}
-
-return 0
diff --git a/gcc/testsuite/gcc.dg/dll-2.c b/gcc/testsuite/gcc.dg/dll-2.c
index 45456ce8330..00c683a728c 100644
--- a/gcc/testsuite/gcc.dg/dll-2.c
+++ b/gcc/testsuite/gcc.dg/dll-2.c
@@ -8,9 +8,7 @@
In C, it's ok to redeclare a variable so this works for variables
and functions. In C++, it only works for functions. */
-/* { dg-do compile { target arm*-*-pe* } } */
-/* { dg-do compile { target i?86-pc-cygwin } } */
-/* { dg-do compile { target i?86-pc-mingw* } } */
+/* { dg-require-dll } */
__declspec (dllimport) int foo1 ();
__declspec (dllexport) int foo1 ();
diff --git a/gcc/testsuite/gcc.dg/visibility-10.c b/gcc/testsuite/gcc.dg/visibility-10.c
new file mode 100644
index 00000000000..d86ce1b1a30
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/visibility-10.c
@@ -0,0 +1,19 @@
+/* Test that a definition marked with dllexport has default
+ visibility. */
+/* { dg-require-visibility "" } */
+/* { dg-require-dll "" } */
+/* { dg-options "-fvisibility=hidden" } */
+/* { dg-final { scan-not-hidden "g" } } */
+/* { dg-final { scan-not-hidden "h" } } */
+/* { dg-final { scan-not-hidden "k" } } */
+/* { dg-final { scan-not-hidden "l" } } */
+
+__declspec(dllexport) void g() {}
+
+__declspec(dllexport) void h();
+void h() {}
+
+__declspec(dllexport) int k;
+
+__declspec(dllexport) extern int l;
+int l;
diff --git a/gcc/testsuite/lib/gcc-dg.exp b/gcc/testsuite/lib/gcc-dg.exp
index 7080df8267b..3f2d9aa701e 100644
--- a/gcc/testsuite/lib/gcc-dg.exp
+++ b/gcc/testsuite/lib/gcc-dg.exp
@@ -338,8 +338,10 @@ proc dg-require-profiling { args } {
proc dg-require-dll { args } {
global target_triplet
- # As a special case, the mcore-*-elf supports dllimport/dllexport.
- if { [string match "mcore-*-elf" $target_triplet] } {
+ # As a special case, the mcore-*-elf supports these attributes.
+ # All Symbian OS targets also support these attributes.
+ if { [string match "mcore-*-elf" $target_triplet]
+ || [string match "*-*-symbianelf" $target_triplet]} {
return
}
# PE/COFF targets support dllimport/dllexport.
diff --git a/gcc/testsuite/lib/scanasm.exp b/gcc/testsuite/lib/scanasm.exp
index 79d93cbf089..9116afc1c41 100644
--- a/gcc/testsuite/lib/scanasm.exp
+++ b/gcc/testsuite/lib/scanasm.exp
@@ -79,6 +79,32 @@ proc scan-assembler-not { args } {
dg-scan "scan-assembler-not" 0 $testcase $output_file $args
}
+# Check that a symbol is defined as a hidden symbol in the .s file
+# produced by the compiler.
+
+proc scan-hidden { args } {
+ upvar 2 name testcase
+ set output_file "[file rootname [file tail $testcase]].s"
+
+ set symbol [lindex $args 0]
+ set args [lreplace $args 0 0 "hidden\[ \t_\]*$symbol"]
+
+ dg-scan "scan-hidden" 1 $testcase $output_file $args
+}
+
+# Check that a symbol is not defined as a hidden symbol in the .s file
+# produced by the compiler.
+
+proc scan-not-hidden { args } {
+ upvar 2 name testcase
+ set output_file "[file rootname [file tail $testcase]].s"
+
+ set symbol [lindex $args 0]
+ set args [lreplace $args 0 0 "hidden\[ \t_\]*$symbol"]
+
+ dg-scan "scan-not-hidden" 0 $testcase $output_file $args
+}
+
# Look for a pattern in OUTPUT_FILE. See dg-scan for details.
proc scan-file { output_file args } {