This is the mail archive of the
libstdc++@gcc.gnu.org
mailing list for the libstdc++ project.
Re: TR1 testing mosh pit
Benjamin Kosnik wrote:
Hey Ed, thanks for this patch. I believe it solves the following issue
pointed out by Paolo previously:
1) __isnan overloads need to be inlined.
In addition, I have fixed up the remaining issues that Paolo deemed
blockers.
2) --disable-c99. This was somewhat problematic, because
poly_laguerre.tcc does some strange things about checking __isnan on a
template argument that is non-floating point, and because of lacking
testsuite infrastructure to disable c99 tests when the target doesn't
support them. Please find both attached as patches.
The poly_laguerre.tcc patch is minimal, but effective. I believe the
better long term fix is to remove _Tpa as a template parameter, since
it is always (as far as I can see) unsigned int. However, perhaps I'm
missing something: you can figure out what you'd like to do after this
goes in.
I've tested my patches overlayed with your last patch on:
x86/linux
x86_64/linux
powerpc64/linux
No fails. Great job. I feel as if this meets Paolo's last criteria,
that this be stable and unproblematic.
So, I'd like you to check this in, preferably before the weekend. If
you are unable to do so, or would rather me do it, provide me with a
ChangeLog entry that is current and I'll happily do it for you.
Again, thanks for this important work.
best,
benjamin
------------------------------------------------------------------------
*** ../libstdc++-v3.tr1_math-3/include/tr1/poly_laguerre.tcc 2007-03-14 17:50:51.000000000 +0100
--- ./include/tr1/poly_laguerre.tcc 2007-03-15 20:34:06.000000000 +0100
*************** _GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1)
*** 258,265 ****
std::__throw_domain_error(__N("Negative argument "
"in __poly_laguerre."));
// Return NaN on NaN input.
- else if (__isnan(__alpha))
- return std::numeric_limits<_Tpa>::quiet_NaN();
else if (__isnan(__x))
return std::numeric_limits<_Tp>::quiet_NaN();
else if (__n == 0)
--- 258,263 ----
------------------------------------------------------------------------
*** testsuite/lib/libstdc++.exp 2007-03-15 21:23:35.000000000 +0100
--- testsuite/lib/dg-options.exp 2007-03-15 21:16:26.000000000 +0100
***************
*** 1,7 ****
! # libstdc++ "tool init file" for DejaGNU
! # Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
! # Free Software Foundation, Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
--- 1,6 ----
! # Handlers for additional dg-xxx keywords in tests.
! # Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
***************
*** 18,830 ****
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301, USA.
!
! # Define callbacks and load other libraries. This file is loaded relatively
! # early, and before any other file we write ourselves. "load_lib" will
! # find anything in the DejaGNU installation tree, or in our lib directory.
! # "load_gcc_lib" will search the core compiler's .exp collection instead.
! #
! # The naming rule is that dg.exp looks for "tool-" and runtest.exp looks
! # for "tool_" when finding callbacks. Utility routines we define for
! # our callbacks begin with "v3-".
! #
! # libstdc++_* callbacks we don't define, but could:
! # ..._option_help prints additional --help output
! # ..._option_proc (--foo) process our own options
! # ..._init (normal.exp) called once per test file
! # ..._finish bracketing function for libstdc++_init
! # ...-dg-prune removing output text, see top of system dg.exp
! #
! # Useful hook: if ${hostname}_init exists, it will be called, almost
! # the last thing before testing begins. This can be defined in, e.g.,
! # ~/.dejagnurc or $DEJAGNU.
!
! proc load_gcc_lib { filename } {
! global srcdir
! load_file $srcdir/../../gcc/testsuite/lib/$filename
! }
!
! # system routines
! load_lib dg.exp
! load_lib libgloss.exp
! # compiler routines, then ours
! load_gcc_lib target-supports.exp
! load_gcc_lib target-supports-dg.exp
! load_lib prune.exp
! load_lib dg-options.exp
! load_gcc_lib target-libpath.exp
! load_gcc_lib wrapper.exp
!
! # Useful for debugging. Pass the name of a variable and the verbosity
! # threshold (number of -v's on the command line).
! proc v3track { var n } {
! upvar $var val
! verbose "++ $var is $val" $n
! }
!
! # Called by v3-init below. "Static" to this file.
! proc v3-copy-files {srcfiles} {
! foreach f $srcfiles {
! if { [catch { set symlink [file readlink $f] } x] } then {
! remote_download target $f
! } else {
! if { [regexp "^/" "$symlink"] } then {
! remote_download target $symlink
! } else {
! set dirname [file dirname $f]
! remote_download target $dirname/$symlink
! }
! }
}
}
! # Called once, during runtest.exp setup.
! proc libstdc++_init { testfile } {
! global env
! global v3-sharedlib
! global srcdir blddir objdir tool_root_dir
! global cxx cxxflags cxxldflags
! global includes
! global gluefile wrap_flags
! global ld_library_path
! global target_triplet
! global flags_file
!
! # We set LC_ALL and LANG to C so that we get the same error
! # messages as expected.
! setenv LC_ALL C
! setenv LANG C
!
! set blddir [lookfor_file [get_multilibs] libstdc++-v3]
! set flags_file "${blddir}/scripts/testsuite_flags"
! v3track flags_file 2
!
! # If a test doesn't have special options, use DEFAULT_CXXFLAGS.
! # Use this variable if the behavior
! # 1) only applies to libstdc++ testing
! # 2) might need to be negated
! # In particular, some tests have to be run without precompiled
! # headers, or without assertions.
! global DEFAULT_CXXFLAGS
! if ![info exists DEFAULT_CXXFLAGS] then {
! set DEFAULT_CXXFLAGS ""
! # Host specific goo here.
! if { [string match "powerpc-*-darwin*" $target_triplet] } {
! append DEFAULT_CXXFLAGS " -multiply_defined suppress"
! }
}
! v3track DEFAULT_CXXFLAGS 2
!
! # By default, we assume we want to run program images.
! global dg-do-what-default
! set dg-do-what-default run
!
! # Copy any required data files.
! v3-copy-files [glob -nocomplain "$srcdir/data/*.tst"]
! v3-copy-files [glob -nocomplain "$srcdir/data/*.txt"]
!
! # Locate libgcc.a so we don't need to account for different values of
! # SHLIB_EXT on different platforms
! set gccdir [lookfor_file $tool_root_dir gcc/libgcc.a]
! if {$gccdir != ""} {
! set gccdir [file dirname $gccdir]
! }
! v3track gccdir 3
!
! # Look for shared library. (ie libstdc++.so.)
! set v3-sharedlib 0
! set sharedlibdir [lookfor_file $blddir src/.libs/libstdc++.so]
! if {$sharedlibdir != ""} {
! if { [string match "*-*-linux*" $target_triplet] && [isnative] } {
! set v3-sharedlib 1
! verbose -log "shared library support detected"
! }
! }
! v3track v3-sharedlib 3
!
! # Compute what needs to be added to the existing LD_LIBRARY_PATH.
! if {$gccdir != ""} {
! set ld_library_path ""
! append ld_library_path ":${gccdir}"
! set compiler ${gccdir}/g++
! append ld_library_path ":${blddir}/src/.libs"
!
! if { [is_remote host] == 0 && [which $compiler] != 0 } {
! foreach i "[exec $compiler --print-multi-lib]" {
! set mldir ""
! regexp -- "\[a-z0-9=_/\.-\]*;" $i mldir
! set mldir [string trimright $mldir "\;@"]
! if { "$mldir" == "." } {
! continue
! }
! if { [llength [glob -nocomplain ${gccdir}/${mldir}/libgcc_s*.so.*]] >= 1 } {
! append ld_library_path ":${gccdir}/${mldir}"
! }
! }
! }
!
! set_ld_library_path_env_vars
! if [info exists env(LD_LIBRARY_PATH)] {
! verbose -log "LD_LIBRARY_PATH = $env(LD_LIBRARY_PATH)"
! }
! } else {
! set compiler [transform "g++"]
! }
!
! # Do a bunch of handstands and backflips for cross compiling and
! # finding simulators...
! if [is_remote host] {
! set header [remote_download host ${blddir}/testsuite/util/testsuite_hooks.h]
! if { $header == "" } {
! verbose -log "Unable to download ${blddir}/testsuite/util/testsuite_hooks.h to host."
! return "untested"
! }
! set cxx [transform "g++"]
! set cxxflags "-ggdb3"
! set cxxldflags ""
! set includes "-I./"
! } else {
! # If we find a testsuite_flags file, we're testing in the build dir.
! if { [file exists $flags_file] } {
! set cxx [exec sh $flags_file --build-cxx]
! set cxxflags [exec sh $flags_file --cxxflags]
! set cxxldflags [exec sh $flags_file --cxxldflags]
! set includes [exec sh $flags_file --build-includes]
! } else {
! set cxx [transform "g++"]
! set cxxldflags ""
! set cxxflags "-g -O2 -D_GLIBCXX_ASSERT -fmessage-length=0"
! set includes "-I${srcdir}/util"
! }
! }
!
! # Always use MO files built by this test harness.
! set cxxflags "$cxxflags -DLOCALEDIR=\".\""
!
! # If a PCH file is available, use it. We must delay performing
! # this check until $cxx and such have been initialized because we
! # perform a test compilation. (Ideally, gcc --print-file-name would
! # list PCH files, but it does not.)
! global PCH_CXXFLAGS
! if ![info exists PCH_CXXFLAGS] then {
! set src "config[pid].cc"
! set f [open $src "w"]
! puts $f "int main () {}"
! close $f
!
! set lines [v3_target_compile $src "config[pid].o" object \
! "additional_flags=-include additional_flags=bits/stdtr1c++.h"]
! if {$lines == "" } {
! # set PCH_CXXFLAGS "-include bits/extc++.h"
! # set PCH_CXXFLAGS "-include bits/stdtr1c++.h"
! set PCH_CXXFLAGS "-include bits/stdc++.h"
! } else {
! set PCH_CXXFLAGS ""
! }
! file delete $src
! v3track PCH_CXXFLAGS 2
! }
!
! libstdc++_maybe_build_wrapper "${objdir}/testglue.o" "-fexceptions"
}
! # Callback for cleanup routines.
! proc libstdc++_exit { } {
! global gluefile;
!
! if [info exists gluefile] {
! file_on_build delete $gluefile;
! unset gluefile;
}
}
! # Callback from system dg-test.
! proc libstdc++-dg-test { prog do_what extra_tool_flags } {
! # Set up the compiler flags, based on what we're going to do.
! switch $do_what {
! "preprocess" {
! set compile_type "preprocess"
! set output_file "[file rootname [file tail $prog]].i"
! }
! "compile" {
! set compile_type "assembly"
! set output_file "[file rootname [file tail $prog]].s"
! }
! "assemble" {
! set compile_type "object"
! set output_file "[file rootname [file tail $prog]].o"
! }
! "link" {
! set compile_type "executable"
! set output_file "./[file rootname [file tail $prog]].exe"
! }
! "run" {
! set compile_type "executable"
! # FIXME: "./" is to cope with "." not being in $PATH.
! # Should this be handled elsewhere?
! # YES.
! set output_file "./[file rootname [file tail $prog]].exe"
! # This is the only place where we care if an executable was
! # created or not. If it was, dg.exp will try to run it.
! catch { remote_file build delete $output_file }
! }
! default {
! perror "$do_what: not a valid dg-do keyword"
! return ""
! }
}
!
! # Short-circut a bunch of complicated goo here for the special
! # case of compiling a test file as a "C" file, not as C++. Why? So
! # -nostdc++ doesn't trip us up. So all the extra object files
! # don't trip us up. So automatically linking in libstdc++ doesn't
! # happen. So CXXFLAGS don't error.
! set select_compile "v3_target_compile"
! set options ""
! if { $extra_tool_flags != "" } {
! verbose -log "extra_tool_flags are:"
! verbose -log $extra_tool_flags
! if { [string first "-x c" $extra_tool_flags ] != -1 } {
! verbose -log "compiling and executing as C, not C++"
! set edit_tool_flags $extra_tool_flags
! regsub -all ".x c" $edit_tool_flags "" edit_tool_flags
! lappend options "additional_flags=$edit_tool_flags"
! set select_compile "v3_target_compile_as_c"
! } else {
! lappend options "additional_flags=$extra_tool_flags"
! }
! }
!
! # There is a libstdc++_compile made for us by default (via the tool-
! # and-target file), but the defaults are lacking in goodness.
! set comp_output [$select_compile "$prog" "$output_file" "$compile_type" $options];
! set comp_output [ prune_g++_output $comp_output ];
!
! return [list $comp_output $output_file]
}
! # True if the library supports wchar_t.
! set v3-wchar_t 0
!
! # True if the library supports threads.
! set v3-threads 0
!
! # True if the library supports symbol versioning.
! set v3-symver 0
!
! # Called from libstdc++-dg-test above. Calls back into system's
! # target_compile to actually do the work.
! proc v3_target_compile { source dest type options } {
! global gluefile
! global wrap_flags
! global cxx
! global cxxflags
! global cxxldflags
! global includes
!
! if { [target_info needs_status_wrapper] != "" && [info exists gluefile] } {
! lappend options "libs=${gluefile}"
! lappend options "ldflags=${wrap_flags}"
! }
!
! set cxx_final $cxx
! set cxxlibglossflags [libgloss_link_flags]
! set cxx_final [concat $cxx_final $cxxlibglossflags]
! set cxx_final [concat $cxx_final $cxxflags]
! set cxx_final [concat $cxx_final $includes]
!
! # Flag setting based on type argument.
! if { $type == "executable" } {
! # Link the support objects into executables.
! set cxx_final [concat $cxx_final $cxxldflags]
! lappend options "additional_flags=./libtestc++.a"
! } else {
! if { $type == "sharedlib" } {
! # Don't link in anything.
! set type "executable"
! }
! }
!
! lappend options "compiler=$cxx_final"
! lappend options "timeout=600"
!
! return [target_compile $source $dest $type $options]
! }
!
!
! # Called from libstdc++-dg-test above, but only for "C" compilation.
! # Calls back into system's target_compile to actually do the work.
! proc v3_target_compile_as_c { source dest type options } {
! global gluefile
! global wrap_flags
! global includes
! global flags_file
! global blddir
!
! if { [target_info needs_status_wrapper] != "" && [info exists gluefile] } {
! lappend options "libs=${gluefile}"
! lappend options "ldflags=${wrap_flags}"
! }
!
! set tname [target_info name]
! set cc [board_info $tname compiler]
! set cc_final $cc
! set cxxlibglossflags [libgloss_link_flags]
! set cc_final [concat $cc_final $cxxlibglossflags]
! set cc_final [concat $cc_final $includes]
! regsub -all ".nostdinc.." $cc_final "" cc_final
!
! # This is needed for "C" tests, as this type of test may need the
! # C++ includes. And if we're not testing in the build directory,
! # the includes variable is not likely to include the necessary info.
! if { ![file exists $flags_file] } {
! set version [exec ${cc} -dumpversion]
! set machine [exec ${cc} -dumpmachine]
! set comp_base_dir [file dirname [file dirname [file dirname [file dirname [file dirname [exec ${cc} --print-prog-name=cc1]]]]]]
! set includesbase "${comp_base_dir}/include/c++/${version}"
! set includestarget "${includesbase}/${machine}"
! set cc_final [concat $cc_final "-I$includesbase -I$includestarget"]
!
! set libsup "${comp_base_dir}/lib"
! } else {
! set libsup "${blddir}/libsupc++/.libs"
}
!
! set cc_final [concat $cc_final "-L$libsup"]
!
! lappend options "compiler=$cc_final"
! lappend options "timeout=600"
!
! return [target_compile $source $dest $type $options]
}
! # Build the support objects linked in with the libstdc++ tests. In
! # addition, set v3-wchar_t, v3-threads, and v3-symver appropriately.
! proc v3-build_support { } {
! global srcdir
! global v3-wchar_t
! global v3-threads
! global v3-symver
! global v3-sharedlib
!
! # Figure out whether or not the library supports certain features.
! set v3-wchar_t 0
! set v3-threads 0
! set v3-symver 0
! set libtest_objs ""
!
! set config_src "config.cc"
! set f [open $config_src "w"]
! puts $f "#include <bits/c++config.h>"
! puts $f "#include <bits/gthr.h>"
! close $f
! set preprocessed [v3_target_compile $config_src "" \
! preprocess "additional_flags=-dN"]
! if { [string first "_GLIBCXX_USE_WCHAR_T" $preprocessed] != -1 } {
! verbose -log "wchar_t support detected"
! set v3-wchar_t 1
! }
! if { [string first "_GLIBCXX_SYMVER" $preprocessed] != -1 } {
! verbose -log "symbol versioning support detected"
! set v3-symver 1
! }
! if { [string first "__GTHREADS" $preprocessed] != -1 } {
! verbose -log "thread support detected"
! set v3-threads 1
! }
!
! # Try to build the MO files that are used by some of the locale
! # tests. If we can't build them, that's OK; it just means that
! # those tests will fail.
! foreach lang [list "fr" "de"] {
! catch {
! file mkdir "$lang/LC_MESSAGES"
! remote_exec "build" "msgfmt" "-o $lang/LC_MESSAGES/libstdc++.mo $srcdir/../po/$lang.po"
! if [is_remote host] {
! remote_exec "host" "mkdir" "-p $lang/LC_MESSAGES"
! remote_download "host" "$lang/LC_MESSAGES/libstdc++.mo" "$lang/LC_MESSAGES/libstdc++.mo"
! }
! }
! }
!
! # Build the support objects.
! set source_files [list testsuite_abi.cc testsuite_allocator.cc \
! testsuite_character.cc testsuite_hooks.cc \
! rng/twister_rand_gen.cc io/verified_cmd_line_input.cc \
! io/prog_bar.cc performance/time/elapsed_timer.cc ]
! foreach f $source_files {
! set obj [file rootname $f].o
! set object_file [file tail $obj]
! # Compile with "-w" so that warnings issued by the compiler
! # do not prevent compilation.
! if { [v3_target_compile $srcdir/util/$f $object_file "object" \
! [list "incdir=$srcdir" "additional_flags=-w"]]
! != "" } {
! error "could not compile $f"
! }
! append libtest_objs "$object_file "
! }
!
! # Collect into libtestc++.a
! set ar [transform "ar"]
! set arcommand "$ar -rc ./libtestc++.a ${libtest_objs}"
! set result [lindex [local_exec "$arcommand" "" "" 300] 0]
! verbose "link result is $result"
! if { $result == 0 } {
! set ranlib [transform "ranlib"]
! set ranlibcommand "$ranlib ./libtestc++.a"
! set result [lindex [local_exec "$ranlibcommand" "" "" 300] 0]
! if { $result != 0 } {
! error "could not link libtestc++.a"
! }
! }
!
! # Build any shared objects needed for regression testing.
! if { ${v3-sharedlib} == 1 } {
! set source_files [list testsuite_shared.cc]
! foreach f $source_files {
! set object_file [file rootname $f].so
! # Compile with "-w" so that warnings issued by the compiler
! # do not prevent compilation.
! if { [v3_target_compile $srcdir/util/$f $object_file "sharedlib" \
! [list "incdir=$srcdir" "additional_flags=-w -shared -fPIC -DPIC"]]
! != "" } {
! error "could not compile $f"
! }
! }
! }
! }
!
! proc check_v3_target_fileio { } {
! global et_fileio_saved
! global et_fileio_target_name
! global tool
!
! if { ![info exists et_fileio_target_name] } {
! set et_fileio_target_name ""
! }
!
! # If the target has changed since we set the cached value, clear it.
! set current_target [current_target_name]
! if { $current_target != $et_fileio_target_name } {
! verbose "check_v3_target_fileio: `$et_fileio_target_name'" 2
! set et_fileio_target_name $current_target
! if [info exists et_fileio_saved] {
! verbose "check_v3_target_fileio: removing cached result" 2
! unset et_fileio_saved
! }
! }
!
! if [info exists et_fileio_saved] {
! verbose "check_v3_target_fileio: using cached result" 2
! } else {
! set et_fileio_saved 0
!
! # Set up, compile, and execute a C++ test program that tries to use
! # the file functions
! set src fileio[pid].cc
! set exe fileio[pid].x
!
! set f [open $src "w"]
! puts $f "#include <sys/types.h>"
! puts $f "#include <sys/stat.h>"
! puts $f "#include <fcntl.h>"
! puts $f "#include <unistd.h>"
! puts $f "#include <errno.h>"
! puts $f "using namespace std;"
! puts $f "int main ()"
! puts $f "{"
! puts $f " int fd = open (\".\", O_RDONLY);"
! puts $f " if (fd == -1)"
! puts $f " {"
! puts $f " int err = errno;"
! puts $f " if (err == EIO || err == ENOSYS)"
! puts $f " return 1;"
! puts $f " }"
! puts $f " else"
! puts $f " close (fd);"
! puts $f " return 0;"
! puts $f "}"
! close $f
!
! set lines [v3_target_compile $src $exe executable ""]
! file delete $src
!
! if [string match "" $lines] {
! # No error message, compilation succeeded.
! set result [${tool}_load "./$exe" "" ""]
! set status [lindex $result 0]
! remote_file build delete $exe
!
! verbose "check_v3_target_fileio: status is <$status>" 2
!
! if { $status == "pass" } {
! set et_fileio_saved 1
! }
! } else {
! verbose "check_v3_target_fileio: compilation failed" 2
! }
! }
! return $et_fileio_saved
! }
!
! proc check_v3_target_c_std { } {
! global et_c_std_saved
! global et_c_std_target_name
! global tool
!
! if { ![info exists et_c_std_target_name] } {
! set et_c_std_target_name ""
! }
!
! # If the target has changed since we set the cached value, clear it.
! set current_target [current_target_name]
! if { $current_target != $et_c_std_target_name } {
! verbose "check_v3_target_c_std: `$et_c_std_target_name'" 2
! set et_c_std_target_name $current_target
! if [info exists et_c_std_saved] {
! verbose "check_v3_target_c_std: removing cached result" 2
! unset et_c_std_saved
! }
! }
!
! if [info exists et_c_std_saved] {
! verbose "check_v3_target_c_std: using cached result" 2
! } else {
! set et_c_std_saved 0
!
! # Set up, compile, and execute a C++ test program that tries to use
! # C99 functionality.
! set src fileio[pid].cc
! set exe fileio[pid].x
!
! set f [open $src "w"]
! puts $f "#include <tr1/cmath>"
! puts $f "int main ()"
! puts $f "{"
! puts $f " float f = 45.55;"
! puts $f " int i = std::tr1::isnan(f);"
! puts $f " return 0;"
! puts $f "}"
! close $f
!
! set lines [v3_target_compile $src $exe executable ""]
! file delete $src
!
! if [string match "" $lines] {
! # No error message, compilation succeeded.
! set result [${tool}_load "./$exe" "" ""]
! set status [lindex $result 0]
! remote_file build delete $exe
!
! verbose "check_v3_target_c_std: status is <$status>" 2
!
! if { $status == "pass" } {
! set et_c_std_saved 1
! }
! } else {
! verbose "check_v3_target_c_std: compilation failed" 2
! }
! }
! return $et_c_std_saved
! }
!
! proc check_v3_target_sharedlib { } {
! global v3-sharedlib
! return ${v3-sharedlib}
! }
!
! proc check_v3_target_time { } {
! global et_time_saved
! global et_time_target_name
! global tool
!
! if { ![info exists et_time_target_name] } {
! set et_time_target_name ""
! }
!
! # If the target has changed since we set the cached value, clear it.
! set current_target [current_target_name]
! if { $current_target != $et_time_target_name } {
! verbose "check_v3_target_time: `$et_time_target_name'" 2
! set et_time_target_name $current_target
! if [info exists et_time_saved] {
! verbose "check_v3_target_time: removing cached result" 2
! unset et_time_saved
! }
! }
!
! if [info exists et_time_saved] {
! verbose "check_v3_target_time: using cached result" 2
! } else {
! set et_time_saved 0
!
! # Set up and compile a C++ test program that tries to use
! # the time function
! set src time[pid].cc
! set exe time[pid].x
!
! set f [open $src "w"]
! puts $f "#include <time.h>"
! puts $f "using namespace std;"
! puts $f "int main ()"
! puts $f "{"
! puts $f " time (0);"
! puts $f "}"
! close $f
!
! set lines [v3_target_compile $src $exe executable ""]
! file delete $src
!
! if [string match "" $lines] {
! # No error message, compilation succeeded.
! verbose "check_v3_target_time: compilation succeeded" 2
! remote_file build delete $exe
! set et_time_saved 1
! } else {
! verbose "check_v3_target_time: compilation failed" 2
! }
! }
! return $et_time_saved
! }
!
! proc check_v3_target_namedlocale { } {
! global et_namedlocale_saved
! global et_namedlocale_target_name
! global tool
!
! if { ![info exists et_namedlocale_target_name] } {
! set et_namedlocale_target_name ""
! }
!
! # If the target has changed since we set the cached value, clear it.
! set current_target [current_target_name]
! if { $current_target != $et_namedlocale_target_name } {
! verbose "check_v3_target_namedlocale: `$et_namedlocale_target_name'" 2
! set et_namedlocale_target_name $current_target
! if [info exists et_namedlocale_saved] {
! verbose "check_v3_target_namedlocale: removing cached result" 2
! unset et_namedlocale_saved
! }
! }
!
! if [info exists et_namedlocale_saved] {
! verbose "check_v3_target_namedlocale: using cached result" 2
! } else {
! set et_namedlocale_saved 0
!
! # Set up, compile, and execute a C++ test program that tries to use
! # all the required named locales.
! set src nlocale[pid].cc
! set exe nlocale[pid].x
!
! set f [open $src "w"]
! puts $f "#include <locale>"
! puts $f "using namespace std;"
! puts $f "int main ()"
! puts $f "{"
! puts $f " try"
! puts $f " {"
! puts $f " locale(\"\");"
! puts $f " locale(\"de_DE\");"
! puts $f " locale(\"de_DE.ISO-8859-15@euro\");"
! puts $f " locale(\"de_DE@euro\");"
! puts $f " locale(\"en_HK\");"
! puts $f " locale(\"en_PH\");"
! puts $f " locale(\"en_US\");"
! puts $f " locale(\"en_US.ISO-8859-1\");"
! puts $f " locale(\"en_US.ISO-8859-15\");"
! puts $f " locale(\"en_US.UTF-8\");"
! puts $f " locale(\"es_ES\");"
! puts $f " locale(\"es_MX\");"
! puts $f " locale(\"fr_FR\");"
! puts $f " locale(\"fr_FR@euro\");"
! puts $f " locale(\"is_IS\");"
! puts $f " locale(\"is_IS.UTF-8\");"
! puts $f " locale(\"it_IT\");"
! puts $f " locale(\"ja_JP.eucjp\");"
! puts $f " locale(\"se_NO.UTF-8\");"
! puts $f " locale(\"ta_IN\");"
! puts $f " locale(\"zh_TW\");"
! puts $f " return 0;"
! puts $f " }"
! puts $f " catch(...)"
! puts $f " {"
! puts $f " return 1;"
! puts $f " }"
! puts $f "}"
! close $f
!
! set lines [v3_target_compile $src $exe executable ""]
! file delete $src
!
! if [string match "" $lines] {
! # No error message, compilation succeeded.
! set result [${tool}_load "./$exe" "" ""]
! set status [lindex $result 0]
! remote_file build delete $exe
!
! verbose "check_v3_target_namedlocale: status is <$status>" 2
!
! if { $status == "pass" } {
! set et_namedlocale_saved 1
! }
! } else {
! verbose "check_v3_target_namedlocale: compilation failed" 2
! }
! }
! return $et_namedlocale_saved
! }
!
! proc check_v3_target_debug_mode { } {
! global cxxflags
! global et_debug_mode
!
! global tool
!
! if { ![info exists et_debug_mode_target_name] } {
! set et_debug_mode_target_name ""
! }
!
! # If the target has changed since we set the cached value, clear it.
! set current_target [current_target_name]
! if { $current_target != $et_debug_mode_target_name } {
! verbose "check_v3_target_debug_mode: `$et_debug_mode_target_name'" 2
! set et_debug_mode_target_name $current_target
! if [info exists et_debug_mode] {
! verbose "check_v3_target_debug_mode: removing cached result" 2
! unset et_debug_mode
! }
! }
!
! if [info exists et_debug_mode] {
! verbose "check_v3_target_debug_mode: using cached result" 2
! } else {
! set et_debug_mode 0
!
! # Set up, compile, and execute a C++ test program that depends
! # on debug mode working.
! set src debug_mode[pid].cc
! set exe debug_mode[pid].exe
!
! set f [open $src "w"]
! puts $f "#include <string>"
! puts $f "using namespace std;"
! puts $f "int main()"
! puts $f "{ return 0; }"
! close $f
!
! set cxxflags_saved $cxxflags
! set cxxflags "$cxxflags -Werror -O0 -D_GLIBCXX_DEBUG"
! set lines [v3_target_compile $src $exe executable ""]
! set cxxflags $cxxflags_saved
! file delete $src
!
! if [string match "" $lines] {
! # No error message, compilation succeeded.
! set et_debug_mode 1
! }
}
! verbose "check_v3_target_debug_mode: $et_debug_mode" 2
! return $et_debug_mode
}
--- 17,72 ----
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301, USA.
! proc dg-require-c-std { args } {
! if { ![ check_v3_target_c_std ] } {
! upvar dg-do-what dg-do-what
! set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"]
! return
}
+ return
}
! proc dg-require-debug-mode { args } {
! if { ![ check_v3_target_debug_mode ] } {
! upvar dg-do-what dg-do-what
! set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"]
! return
}
! return
}
! proc dg-require-fileio { args } {
! if { ![ check_v3_target_fileio ] } {
! upvar dg-do-what dg-do-what
! set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"]
! return
}
+ return
}
! proc dg-require-namedlocale { args } {
! if { ![ check_v3_target_namedlocale ] } {
! upvar dg-do-what dg-do-what
! set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"]
! return
}
! return
}
! proc dg-require-sharedlib { args } {
! if { ![ check_v3_target_sharedlib ] } {
! upvar dg-do-what dg-do-what
! set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"]
! return
}
! return
}
! proc dg-require-time { args } {
! if { ![ check_v3_target_time ] } {
! upvar dg-do-what dg-do-what
! set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"]
! return
}
! return
}
------------------------------------------------------------------------
2007-03-15 Benjamin Kosnik <bkoz@redhat.com>
* testsuite/lib/dg-options.exp (dg-require-c-std): New.
* testsuite/lib/libstdc++.exp (check_v3_target_c_std): New. Check to
see if _GLIBCXX_USE_C99_MATH is active.
* testsuite/tr1/5_numerical_facilities/special_functions/
08_cyl_bessel_i/check_nan.cc: Use dg-require-c-std.
* testsuite/tr1/5_numerical_facilities/special_functions/
17_hyperg/check_nan.cc: Same.
* testsuite/tr1/5_numerical_facilities/special_functions/
13_ellint_2/check_nan.cc: Same.
* testsuite/tr1/5_numerical_facilities/special_functions/
20_riemann_zeta/check_nan.cc: Same.
* testsuite/tr1/5_numerical_facilities/special_functions/
01_assoc_laguerre/check_nan.cc: Same.
* testsuite/tr1/5_numerical_facilities/special_functions/
02_assoc_legendre/check_nan.cc: Same.
* testsuite/tr1/5_numerical_facilities/special_functions/
22_sph_legendre/check_nan.cc: Same.
* testsuite/tr1/5_numerical_facilities/special_functions/
10_cyl_bessel_k/check_nan.cc: Same.
* testsuite/tr1/5_numerical_facilities/special_functions/
09_cyl_bessel_j/check_nan.cc: Same.
* testsuite/tr1/5_numerical_facilities/special_functions/
21_sph_bessel/check_nan.cc: Same.
* testsuite/tr1/5_numerical_facilities/special_functions/
07_conf_hyperg/check_nan.cc: Same.
* testsuite/tr1/5_numerical_facilities/special_functions/
16_hermite/check_nan.cc: Same.
* testsuite/tr1/5_numerical_facilities/special_functions/
12_ellint_1/check_nan.cc: Same.
* testsuite/tr1/5_numerical_facilities/special_functions/
05_comp_ellint_2/check_nan.cc: Same.
* testsuite/tr1/5_numerical_facilities/special_functions/
18_laguerre/check_nan.cc: Same.
* testsuite/tr1/5_numerical_facilities/special_functions/
14_ellint_3/check_nan.cc: Same.
* testsuite/tr1/5_numerical_facilities/special_functions/
04_comp_ellint_1/check_nan.cc: Same.
* testsuite/tr1/5_numerical_facilities/special_functions/
06_comp_ellint_3/check_nan.cc: Same.
* testsuite/tr1/5_numerical_facilities/special_functions/
19_legendre/check_nan.cc: Same.
* testsuite/tr1/5_numerical_facilities/special_functions/
03_beta/check_nan.cc: Same.
* testsuite/tr1/5_numerical_facilities/special_functions/
11_cyl_neumann/check_nan.cc: Same.
* testsuite/tr1/5_numerical_facilities/special_functions/
15_expint/check_nan.cc: Same.
* testsuite/tr1/5_numerical_facilities/special_functions/
23_sph_neumann/check_nan.cc: Same.
* include/tr1/poly_laguerre.tcc (__poly_laguerre): Don't check if
unsigned int can be a NaN.
Since I don't have write access I would be happy for you to do it.
Here is a ChangeLog. I hope it's the right format.
The Laguerre is valid for real - not just integral - degree and I guess
I wanted to keep as much generality as late as possible.
OTOH, TR1 doesn't want this so I may take it out with a comment.
I also need to come up with some real tests for the Hermite polynomials.
Ed
2007-03-16 Edward M. Smith-Rowland <3dw4rd@verizon.net>
* docs/html/ext/tr1.html : Marked tr1 math special functions done.
* docs/html/faq/index.html : Ditto.
* include/Makefile.in : Added new special function header files.
* include/Makefile.am : Ditto.
* include/tr1/common.h : Added type promotion routines for three and four args.
* include/tr1/special_function_util.h: New.
* include/tr1/bessel_function.tcc: New.
* include/tr1/beta_function.tcc: New.
* include/tr1/ell_integral.tcc: New.
* include/tr1/exp_integral.tcc: New.
* include/tr1/gamma.tcc: New.
* include/tr1/hypergeometric.tcc: New.
* include/tr1/legendre_function.tcc: New.
* include/tr1/modified_bessel_func.tcc: New.
* include/tr1/poly_hermite.tcc: New.
* include/tr1/poly_laguerre.tcc: New.
* include/tr1/riemann_zeta.tcc: New.
* include/tr1/cmath : Included tr1 math special functions.
* include/tr1/math.h : Ditto.
* testsuite/tr1/5_numerical_facilities/special_functions/testcase.h: New.
* testsuite/tr1/5_numerical_facilities/special_functions/01_assoc_laguerre/
compile.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/01_assoc_laguerre/
check_nan.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/01_assoc_laguerre/
check_value.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/01_assoc_laguerre/
compile_2.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/02_assoc_legendre/
compile.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/02_assoc_legendre/
check_nan.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/02_assoc_legendre/
check_value.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/02_assoc_legendre/
compile_2.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/03_beta/
compile.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/03_beta/
check_nan.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/03_beta/
check_value.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/03_beta/
compile_2.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/04_comp_ellint_1/
compile.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/04_comp_ellint_1/
check_nan.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/04_comp_ellint_1/
check_value.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/04_comp_ellint_1/
compile_2.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/05_comp_ellint_2/
compile.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/05_comp_ellint_2/
check_nan.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/05_comp_ellint_2/
check_value.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/05_comp_ellint_2/
compile_2.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/06_comp_ellint_3/
compile.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/06_comp_ellint_3/
check_nan.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/06_comp_ellint_3/
check_value.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/06_comp_ellint_3/
compile_2.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/07_conf_hyperg/
compile.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/07_conf_hyperg/
check_nan.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/07_conf_hyperg/
check_value.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/07_conf_hyperg/
compile_2.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/08_cyl_bessel_i/
compile.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/08_cyl_bessel_i/
check_nan.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/08_cyl_bessel_i/
check_value.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/08_cyl_bessel_i/
compile_2.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/09_cyl_bessel_j/
compile.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/09_cyl_bessel_j/
check_nan.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/09_cyl_bessel_j/
check_value.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/09_cyl_bessel_j/
compile_2.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/10_cyl_bessel_k/
compile.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/10_cyl_bessel_k/
check_nan.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/10_cyl_bessel_k/
check_value.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/10_cyl_bessel_k/
compile_2.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/11_cyl_neumann/
compile.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/11_cyl_neumann/
check_nan.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/11_cyl_neumann/
check_value.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/11_cyl_neumann/
compile_2.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/12_ellint_1/
compile.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/12_ellint_1/
check_nan.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/12_ellint_1/
check_value.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/12_ellint_1/
compile_2.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/13_ellint_2/
compile.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/13_ellint_2/
check_nan.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/13_ellint_2/
check_value.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/13_ellint_2/
compile_2.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/14_ellint_3/
compile.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/14_ellint_3/
check_nan.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/14_ellint_3/
check_value.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/14_ellint_3/
compile_2.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/15_expint/
check_value_neg.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/15_expint/
compile.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/15_expint/
check_nan.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/15_expint/
compile_2.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/15_expint/
check_value_pos.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/16_hermite/
compile.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/16_hermite/
check_nan.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/16_hermite/
compile_2.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/17_hyperg/
compile.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/17_hyperg/
check_nan.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/17_hyperg/
check_value.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/17_hyperg/
compile_2.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/18_laguerre/
compile.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/18_laguerre/
check_nan.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/18_laguerre/
check_value.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/18_laguerre/
compile_2.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/19_legendre/
compile.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/19_legendre/
check_nan.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/19_legendre/
check_value.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/19_legendre/
compile_2.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/20_riemann_zeta/
check_value_neg.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/20_riemann_zeta/
compile.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/20_riemann_zeta/
check_nan.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/20_riemann_zeta/
compile_2.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/20_riemann_zeta/
check_value_pos.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/21_sph_bessel/
compile.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/21_sph_bessel/
check_nan.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/21_sph_bessel/
check_value.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/21_sph_bessel/
compile_2.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/22_sph_legendre/
compile.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/22_sph_legendre/
check_nan.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/22_sph_legendre/
check_value.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/22_sph_legendre/
compile_2.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/23_sph_neumann/
compile.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/23_sph_neumann/
check_nan.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/23_sph_neumann/
check_value.cc: New.
* testsuite/tr1/5_numerical_facilities/special_functions/23_sph_neumann/
compile_2.cc: New.