pragma-override1.C: Mark as requiring 'internal' visibility.
authorGeoffrey Keating <geoffk@apple.com>
Fri, 25 Mar 2005 02:21:01 +0000 (02:21 +0000)
committerGeoffrey Keating <geoffk@gcc.gnu.org>
Fri, 25 Mar 2005 02:21:01 +0000 (02:21 +0000)
* g++.dg/ext/visibility/pragma-override1.C: Mark as requiring
'internal' visibility.
* g++.dg/ext/visibility/pragma-override2.C: Likewise.
* g++.dg/ext/visibility/visibility-7.C: Mark as requiring
'protected' visibility.
* gcc.dg/visibility-7.c: Likewise.
* lib/target-supports.exp (check_visibility_available): Take
a parameter, the kind of visibility to check for.
* lib/target-supports-dg.exp (dg-require-visibility): Pass parameter
to check_visibility_available.

From-SVN: r97031

gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/ext/visibility/pragma-override1.C
gcc/testsuite/g++.dg/ext/visibility/pragma-override2.C
gcc/testsuite/g++.dg/ext/visibility/visibility-7.C
gcc/testsuite/gcc.dg/visibility-7.c
gcc/testsuite/lib/target-supports-dg.exp
gcc/testsuite/lib/target-supports.exp

index e07979abb73299199731e523e59ee3cf6d5d25b1..985dee530ed09d53ffe353d19a1653c2fa78b91d 100644 (file)
@@ -4,6 +4,17 @@
 
 2005-03-24  Geoffrey Keating  <geoffk@apple.com>
 
+       * g++.dg/ext/visibility/pragma-override1.C: Mark as requiring
+       'internal' visibility.
+       * g++.dg/ext/visibility/pragma-override2.C: Likewise.
+       * g++.dg/ext/visibility/visibility-7.C: Mark as requiring
+       'protected' visibility.
+       * gcc.dg/visibility-7.c: Likewise.
+       * lib/target-supports.exp (check_visibility_available): Take
+       a parameter, the kind of visibility to check for.
+       * lib/target-supports-dg.exp (dg-require-visibility): Pass parameter
+       to check_visibility_available.
+
        * g++.dg/expr/cast3.C: New.
 
 2005-03-24  David Edelsohn  <edelsohn@gnu.org>
index a2c93ebb752fd0d7e25d76b6b5df676b51023d2a..e292df41b4c4b3700f3101023092c001996632c1 100644 (file)
@@ -1,6 +1,6 @@
 /* Test that #pragma GCC visibility does not override class member specific settings. */
 /* { dg-do compile } */
-/* { dg-require-visibility "" } */
+/* { dg-require-visibility "internal" } */
 /* { dg-final { scan-assembler "\\.internal.*Foo.methodEv" } } */
 
 #pragma GCC visibility push(hidden)
index a4bb42c728a26b8c967b46b0973376274bbc7c89..fe6c47fdbf51f6c8ea471e5d5239ac3d785510ca 100644 (file)
@@ -1,6 +1,6 @@
 /* Test that #pragma GCC visibility does not override class member specific settings. */
 /* { dg-do compile } */
-/* { dg-require-visibility "" } */
+/* { dg-require-visibility "internal" } */
 /* { dg-final { scan-assembler "\\.internal.*Foo.methodEv" } } */
 
 #pragma GCC visibility push(hidden)
index dbd7010d0288f820c03db7c04ee2e4f3727efc1a..ae4589397b6121fa392ba9cebe530af23542dfcd 100644 (file)
@@ -1,5 +1,5 @@
 /* Test warning from conflicting visibility specifications. */
-/* { dg-require-visibility "" } */
+/* { dg-require-visibility "protected" } */
 /* { dg-final { scan-hidden "xyzzy" } } */
 
 extern int 
index f5e6e9aae5cec5849e9297fb991f9108cd0a5ec2..aaa8165e3e0b85dbe670015d632425fa07d7c38c 100644 (file)
@@ -1,6 +1,6 @@
 /* Test warning from conflicting visibility specifications. */
 /* { dg-do compile } */
-/* { dg-require-visibility "" } */
+/* { dg-require-visibility "protected" } */
 /* { dg-final { scan-hidden "xyzzy" } } */
 
 extern int 
index e3ad1d540fad9ec0d2a4fc2347cc8a7da8da895b..1f2242fdc5da07c47d8407541dbda20cd8ee85fd 100644 (file)
@@ -32,7 +32,7 @@ proc dg-require-weak { args } {
 # test.
 
 proc dg-require-visibility { args } {
-    set visibility_available [ check_visibility_available ]
+    set visibility_available [ check_visibility_available [lindex $args 1 ] ]
     if { $visibility_available == -1 } {
        upvar name name
        unresolved "$name"
index d37fd2d6b8ff30137928fed644cc463b82da8215..4b129a870a14191b6786518465f80f1bfdd6f6db 100644 (file)
@@ -110,13 +110,14 @@ proc check_weak_available { } {
 }
 
 ###############################
-# proc check_visibility_available { }
+# proc check_visibility_available { what_kind }
 ###############################
 
 # The visibility attribute is only support in some object formats
 # This proc returns 1 if it is supported, 0 if not.
+# The argument is the kind of visibility, default/protected/hidden/internal.
 
-proc check_visibility_available { } {
+proc check_visibility_available { what_kind } {
     global visibility_available_saved
     global tool
     global target_triplet
@@ -126,18 +127,29 @@ proc check_visibility_available { } {
         return 0
     }
 
-    if {![info exists visibility_available_saved] } {
-       set lines [get_compiler_messages visibility object {
-           void f() __attribute__((visibility("hidden")));
-           void f() {}
-       }]
-       if [string match "" $lines] then {
-           set visibility_available_saved 1
-       } else {
-           set visibility_available_saved 0
+    if [string match "" $what_kind] { set what_kind "hidden" }
+
+    if { [info exists visibility_available_saved] } {
+       verbose "Saved result is <$visibility_available_saved>" 1
+       if { [ lsearch -exact $visibility_available_saved $what_kind ] != -1 } {
+           return 1
+       } elseif { [ lsearch -exact $visibility_available_saved "!$what_kind" ] != -1 } {
+           return 0
        }
     }
-    return $visibility_available_saved
+
+    set lines [get_compiler_messages visibility object "
+       void f() __attribute__((visibility(\"$what_kind\")));
+       void f() {}
+    "]
+    if [string match "" $lines] then {
+       set answer 1
+       lappend visibility_available_saved $what_kind
+    } else {
+       set answer 0
+       lappend visibility_available_saved "!$what_kind"
+    }
+    return $answer
 }
 
 ###############################