+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.
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();
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)
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();
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()
}
# 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]] }
+ }]
}
###############################
}
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 ""]]
+ }]
+}