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
This commit is contained in:
Richard Sandiford 2007-09-22 08:26:50 +00:00 committed by Richard Sandiford
parent db9a0df07f
commit 1018b4c356
6 changed files with 64 additions and 28 deletions

View File

@ -1,3 +1,15 @@
2007-09-22 Richard Sandiford <rsandifo@nildram.co.uk>
* 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 <rsandifo@nildram.co.uk>
* lib/target-supports.exp (add_options_for_c99_runtime): New procedure.

View File

@ -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()

View File

@ -1,5 +1,6 @@
/* { dg-do compile } */
/* { dg-options "-fdump-tree-gimple" } */
/* { dg-require-effective-target c99_runtime } */
double test (double x)
{

View File

@ -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)
{

View File

@ -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)
{

View File

@ -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 ""]]
}]
}