Rainer,

The test-case cproj-fails-with-broken-glibc.c does not work with broken glibcs, as the header comment mentions:
...
   Check the runtime behavior of the C library's cproj() function and
   whether it follows the standard.  Versions of GLIBC through 2.11.1
   had an incorrect implementation which will conflict with GCC's
   builtin cproj().  GLIBC 2.12+ should be okay.
...

This patch skips the test for known broken glibcs. OK for trunk?

Thanks,
- Tom

2014-07-31  Tom de Vries  <t...@codesourcery.com>

	* lib/target-supports.exp (check_effective_target_glibc)
	(check_effective_target_glibc_2_12_or_later)
	(check_effective_target_not_glibc_2_11_or_earlier): New proc.
	* gcc.dg/cproj-fails-with-broken-glibc.c: Require effective target
	not_glibc_2_11_or_earlier.

diff --git a/gcc/testsuite/gcc.dg/cproj-fails-with-broken-glibc.c b/gcc/testsuite/gcc.dg/cproj-fails-with-broken-glibc.c
index fe143b9..1df29f9 100644
--- a/gcc/testsuite/gcc.dg/cproj-fails-with-broken-glibc.c
+++ b/gcc/testsuite/gcc.dg/cproj-fails-with-broken-glibc.c
@@ -11,6 +11,7 @@
 /* { dg-options "-fno-builtin-cproj" } */
 /* { dg-add-options c99_runtime } */
 /* { dg-require-effective-target c99_runtime } */
+/* { dg-require-effective-target not_glibc_2_11_or_earlier } */
 
 extern void abort(void);
 extern void exit(int);
diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
index fa5137e..cbe2930 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -5038,6 +5038,44 @@ proc check_effective_target_newlib {} {
     }]
 }
 
+# Return true if this is a glibc target.
+
+proc check_effective_target_glibc {} {
+    return [check_no_compiler_messages glibc object {
+	#include <features.h>
+	#if !(defined (__GLIBC__) && defined (__GLIBC_MINOR__))
+	#error FOO
+	#endif
+    }]
+}
+
+# Return true if this is a glibc 2.12 or later target.
+
+proc check_effective_target_glibc_2_12_or_later {} {
+    return [check_no_compiler_messages glibc_2_12_or_later object {
+	#include <features.h>
+	#if !(defined (__GLIBC__) && defined (__GLIBC_MINOR__) \
+              && __GLIBC_PREREQ(2,12))
+	#error FOO
+	#endif
+    }]
+}
+
+# Return true if this is a not a glibc 2.11 or earlier target.
+
+proc check_effective_target_not_glibc_2_11_or_earlier {} {
+
+    if { ![check_effective_target_glibc] } {
+	return 1
+    }
+    
+    if { [check_effective_target_glibc_2_12_or_later] } {
+	return 1
+    }
+
+    return 0
+}
+
 # Return true if this is NOT a Bionic target.
 
 proc check_effective_target_non_bionic {} {
-- 
1.9.1

Reply via email to