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:
parent
db9a0df07f
commit
1018b4c356
|
@ -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.
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-fdump-tree-gimple" } */
|
||||
/* { dg-require-effective-target c99_runtime } */
|
||||
|
||||
double test (double x)
|
||||
{
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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 ""]]
|
||||
}]
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue