From 1018b4c3565d3c892addfc349b00b3519308211e Mon Sep 17 00:00:00 2001 From: Richard Sandiford Date: Sat, 22 Sep 2007 08:26:50 +0000 Subject: [PATCH] target-supports.exp (check_cached_effective_target): New procedure. gcc/testsuite/ * lib/target-supports.exp (check_cached_effective_target): New procedure. (check_no_compiler_messages, check_no_messages_and_pattern): Use it. (check_effective_target_c99_runtime): New procedure. * gcc.dg/builtins-20.c (test3f): Wrap cargf check in HAVE_C99_RUNTIME. (test3l): Likewise cargl. * gcc.dg/builtins-59.c: Require c99_runtime. * gcc.dg/builtins-61.c: Likewise. * gcc.dg/builtins-62.c: Likewise. From-SVN: r128664 --- gcc/testsuite/ChangeLog | 12 +++++++ gcc/testsuite/gcc.dg/builtins-20.c | 16 +++++---- gcc/testsuite/gcc.dg/builtins-59.c | 1 + gcc/testsuite/gcc.dg/builtins-61.c | 1 + gcc/testsuite/gcc.dg/builtins-62.c | 1 + gcc/testsuite/lib/target-supports.exp | 61 ++++++++++++++++++++++------------- 6 files changed, 64 insertions(+), 28 deletions(-) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 84681ecbf99..710d8df6ee3 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,17 @@ 2007-09-22 Richard Sandiford + * lib/target-supports.exp (check_cached_effective_target): New + procedure. + (check_no_compiler_messages, check_no_messages_and_pattern): Use it. + (check_effective_target_c99_runtime): New procedure. + * gcc.dg/builtins-20.c (test3f): Wrap cargf check in HAVE_C99_RUNTIME. + (test3l): Likewise cargl. + * gcc.dg/builtins-59.c: Require c99_runtime. + * gcc.dg/builtins-61.c: Likewise. + * gcc.dg/builtins-62.c: Likewise. + +2007-09-22 Richard Sandiford + * lib/target-supports.exp (add_options_for_c99_runtime): New procedure. * lib/target-supports-dg.exp (dg-add-options): Likewise. * gcc.dg/builtins-18.c: Use { dg-add-options c99_runtime } instead of diff --git a/gcc/testsuite/gcc.dg/builtins-20.c b/gcc/testsuite/gcc.dg/builtins-20.c index 4acb9218cff..43aa71b271a 100644 --- a/gcc/testsuite/gcc.dg/builtins-20.c +++ b/gcc/testsuite/gcc.dg/builtins-20.c @@ -449,9 +449,6 @@ void test2f(float x, float y) void test3f(__complex__ float x, __complex__ float y, int i) { - if (cargf(x) != atan2f(__imag__ x, __real__ x)) - link_error (); - if (ccosf(x) != ccosf(-x)) link_error(); @@ -502,6 +499,11 @@ void test3f(__complex__ float x, __complex__ float y, int i) if (ctanf(~(x/y)) != -ctanf(~(x/-y))) link_error(); + +#ifdef HAVE_C99_RUNTIME + if (cargf(x) != atan2f(__imag__ x, __real__ x)) + link_error (); +#endif } void test1l(long double x) @@ -674,9 +676,6 @@ void test2l(long double x, long double y) void test3l(__complex__ long double x, __complex__ long double y, int i) { - if (cargl(x) != atan2l(__imag__ x, __real__ x)) - link_error (); - if (ccosl(x) != ccosl(-x)) link_error(); @@ -727,6 +726,11 @@ void test3l(__complex__ long double x, __complex__ long double y, int i) if (ctanl(~(x/y)) != -ctanl(~(x/-y))) link_error(); + +#ifdef HAVE_C99_RUNTIME + if (cargl(x) != atan2l(__imag__ x, __real__ x)) + link_error (); +#endif } int main() diff --git a/gcc/testsuite/gcc.dg/builtins-59.c b/gcc/testsuite/gcc.dg/builtins-59.c index a7da71265d4..b940d39ed60 100644 --- a/gcc/testsuite/gcc.dg/builtins-59.c +++ b/gcc/testsuite/gcc.dg/builtins-59.c @@ -1,5 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-fdump-tree-gimple" } */ +/* { dg-require-effective-target c99_runtime } */ double test (double x) { diff --git a/gcc/testsuite/gcc.dg/builtins-61.c b/gcc/testsuite/gcc.dg/builtins-61.c index 9f0c99065da..dff163ff112 100644 --- a/gcc/testsuite/gcc.dg/builtins-61.c +++ b/gcc/testsuite/gcc.dg/builtins-61.c @@ -1,5 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-O -ffast-math -fdump-tree-optimized" } */ +/* { dg-require-effective-target c99_runtime } */ double test1 (double x) { diff --git a/gcc/testsuite/gcc.dg/builtins-62.c b/gcc/testsuite/gcc.dg/builtins-62.c index af7a02a4c07..db62696938e 100644 --- a/gcc/testsuite/gcc.dg/builtins-62.c +++ b/gcc/testsuite/gcc.dg/builtins-62.c @@ -1,5 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-O -ffinite-math-only -fdump-tree-optimized" } */ +/* { dg-require-effective-target c99_runtime } */ double test1 (double x) { diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index 8bbb141ec10..7c6aef09b81 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -87,43 +87,41 @@ proc current_target_name { } { } # Implement an effective-target check for property PROP by invoking -# the compiler and seeing if it prints any messages. Assume that the -# property holds if the compiler doesn't print anything. The other -# arguments are as for get_compiler_messages, starting with TYPE. -proc check_no_compiler_messages {prop args} { +# the Tcl command ARGS and seeing if it returns true. + +proc check_cached_effective_target { prop args } { global et_cache set target [current_target_name] if {![info exists et_cache($prop,target)] || $et_cache($prop,target) != $target} { - verbose "check_no_compiler_messages $prop: compiling source for $target" 2 + verbose "check_cached_effective_target $prop: checking $target" 2 set et_cache($prop,target) $target - set et_cache($prop,value) \ - [string match "" [eval get_compiler_messages $prop 0 $args]] + set et_cache($prop,value) [uplevel eval $args] } set value $et_cache($prop,value) - verbose "check_no_compiler_messages $prop: returning $value for $target" 2 + verbose "check_cached_effective_target $prop: returning $value for $target" 2 return $value } +# Implement an effective-target check for property PROP by invoking +# the compiler and seeing if it prints any messages. Assume that the +# property holds if the compiler doesn't print anything. The other +# arguments are as for get_compiler_messages, starting with TYPE. +proc check_no_compiler_messages {prop args} { + return [check_cached_effective_target $prop { + string match "" [eval get_compiler_messages $prop 0 $args] + }] +} + # Similar to check_no_compiler_messages, but also verify that the regular # expression PATTERN matches the compiler's output. proc check_no_messages_and_pattern {prop pattern args} { - global et_cache - - set target [current_target_name] - if {![info exists et_cache($prop,target)] - || $et_cache($prop,target) != $target} { - verbose "check_no_messages_and_pattern $prop: compiling source for $target" 2 - set et_cache($prop,target) $target + return [check_cached_effective_target $prop { set results [eval get_compiler_messages $prop 1 $args] - set et_cache($prop,value) \ - [expr [string match "" [lindex $results 0]] \ - && [regexp $pattern [lindex $results 1]]] - } - set value $et_cache($prop,value) - verbose "check_no_messages_and_pattern $prop: returning $value for $target" 2 - return $value + expr { [string match "" [lindex $results 0]] + && [regexp $pattern [lindex $results 1]] } + }] } ############################### @@ -2574,3 +2572,22 @@ proc add_options_for_c99_runtime { flags } { } return $flags } + +# Return 1 if the target provides a full C99 runtime. + +proc check_effective_target_c99_runtime { } { + return [check_cached_effective_target c99_runtime { + global srcdir + + set file [open "$srcdir/gcc.dg/builtins-config.h"] + set contents [read $file] + close $file + append contents { + #ifndef HAVE_C99_RUNTIME + #error FOO + #endif + } + string match "" [get_compiler_messages c99_runtime 0 assembly \ + $contents [add_options_for_c99_runtime ""]] + }] +} -- 2.11.4.GIT