This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Suppress false failures with visibility on Darwin


Darwin only has 'hidden' and 'default', not 'internal' or 'protected'.

Tested by running the testsuite on powerpc-darwin8.

-- 
- Geoffrey Keating <geoffk@apple.com>

===File ~/patches/gcc-3961370.patch=========================
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.

Index: g++.dg/ext/visibility/pragma-override1.C
===================================================================
RCS file: /cvs/gcc/gcc/gcc/testsuite/g++.dg/ext/visibility/pragma-override1.C,v
retrieving revision 1.1
diff -u -p -u -p -r1.1 pragma-override1.C
--- g++.dg/ext/visibility/pragma-override1.C	25 Jul 2004 22:52:21 -0000	1.1
+++ g++.dg/ext/visibility/pragma-override1.C	25 Mar 2005 01:49:19 -0000
@@ -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: g++.dg/ext/visibility/pragma-override2.C
===================================================================
RCS file: /cvs/gcc/gcc/gcc/testsuite/g++.dg/ext/visibility/pragma-override2.C,v
retrieving revision 1.1
diff -u -p -u -p -r1.1 pragma-override2.C
--- g++.dg/ext/visibility/pragma-override2.C	25 Jul 2004 22:52:21 -0000	1.1
+++ g++.dg/ext/visibility/pragma-override2.C	25 Mar 2005 01:49:19 -0000
@@ -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: g++.dg/ext/visibility/visibility-7.C
===================================================================
RCS file: /cvs/gcc/gcc/gcc/testsuite/g++.dg/ext/visibility/visibility-7.C,v
retrieving revision 1.2
diff -u -p -u -p -r1.2 visibility-7.C
--- g++.dg/ext/visibility/visibility-7.C	6 Aug 2004 02:03:28 -0000	1.2
+++ g++.dg/ext/visibility/visibility-7.C	25 Mar 2005 01:49:19 -0000
@@ -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: gcc.dg/visibility-7.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/testsuite/gcc.dg/visibility-7.c,v
retrieving revision 1.3
diff -u -p -u -p -r1.3 visibility-7.c
--- gcc.dg/visibility-7.c	28 Oct 2004 23:38:46 -0000	1.3
+++ gcc.dg/visibility-7.c	25 Mar 2005 01:49:53 -0000
@@ -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: lib/target-supports-dg.exp
===================================================================
RCS file: /cvs/gcc/gcc/gcc/testsuite/lib/target-supports-dg.exp,v
retrieving revision 1.1
diff -u -p -u -p -r1.1 target-supports-dg.exp
--- lib/target-supports-dg.exp	11 Feb 2005 22:36:53 -0000	1.1
+++ lib/target-supports-dg.exp	25 Mar 2005 01:49:59 -0000
@@ -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: lib/target-supports.exp
===================================================================
RCS file: /cvs/gcc/gcc/gcc/testsuite/lib/target-supports.exp,v
retrieving revision 1.44
diff -u -p -u -p -r1.44 target-supports.exp
--- lib/target-supports.exp	15 Mar 2005 18:41:19 -0000	1.44
+++ lib/target-supports.exp	25 Mar 2005 01:50:00 -0000
@@ -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
 }
 
 ###############################
============================================================


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]