ext/random/hypergeometric_distribution/operators/values.cc fails to
compile on Solaris 9 which lacks full C99 support in libc/libm:

FAIL: ext/random/hypergeometric_distribution/operators/values.cc (test for 
excess errors)

Excess errors:
/vol/gcc/src/hg/trunk/local/libstdc++-v3/testsuite/ext/random/hypergeometric_dis
tribution/operators/values.cc:41:45: error: 'hypergeometric_pdf' was not declare
d in this scope
/vol/gcc/src/hg/trunk/local/libstdc++-v3/testsuite/ext/random/hypergeometric_dis
tribution/operators/values.cc:46:48: error: 'hypergeometric_pdf' was not declare
d in this scope
/vol/gcc/src/hg/trunk/local/libstdc++-v3/testsuite/ext/random/hypergeometric_dis
tribution/operators/values.cc:51:47: error: 'hypergeometric_pdf' was not declare
d in this scope
/vol/gcc/src/hg/trunk/local/libstdc++-v3/testsuite/util/testsuite_random.h:56:7:
 error: void value not ignored as it ought to be
/vol/gcc/src/hg/trunk/local/libstdc++-v3/testsuite/util/testsuite_random.h:56:7:
 error: void value not ignored as it ought to be
/vol/gcc/src/hg/trunk/local/libstdc++-v3/testsuite/util/testsuite_random.h:56:7:
 error: void value not ignored as it ought to be

WARNING: ext/random/hypergeometric_distribution/operators/values.cc compilation 
failed to produce executable


hypergeometric_pdf is defined in testsuite/util/testsuite_random.h
inside _GLIBCXX_USE_C99_MATH_TR1, but used unconditionally.  Fixed which
the following patch which allows the test to compile and pass on
i386-pc-solaris2.9.  On i386-pc-solaris2.11, it FAILs with an Arithmetic
exception, as it did before the patch:

Program received signal SIGFPE, Arithmetic exception.
[Switching to Thread 1 (LWP 1)]
0x080542ba in std::generate_canonical<unsigned int, 32u, 
std::mersenne_twister_engine<unsigned int, 32u, 624u, 397u, 31u, 2567483615u, 
11u, 4294967295u, 7u, 2636928640u, 15u, 4022730752u, 18u, 1812433253u> > 
(__urng=...)
    at 
/var/gcc/regression/trunk/11-gcc/build/i386-pc-solaris2.11/libstdc++-v3/include/bits/random.tcc:3480
3480          return __sum / __tmp;

__tmp is 0 here.

Ok for mainline?

        Rainer


2013-11-27  Rainer Orth  <r...@cebitec.uni-bielefeld.de>

        * testsuite/ext/random/hypergeometric_distribution/operators/values.cc
        (test01): Wrap in _GLIBCXX_USE_C99_MATH_TR1.

diff --git a/libstdc++-v3/testsuite/ext/random/hypergeometric_distribution/operators/values.cc b/libstdc++-v3/testsuite/ext/random/hypergeometric_distribution/operators/values.cc
--- a/libstdc++-v3/testsuite/ext/random/hypergeometric_distribution/operators/values.cc
+++ b/libstdc++-v3/testsuite/ext/random/hypergeometric_distribution/operators/values.cc
@@ -31,6 +31,7 @@
 void
 test01()
 {
+#if _GLIBCXX_USE_C99_MATH_TR1
   using namespace __gnu_test;
 
   std::mt19937 eng;
@@ -49,6 +50,7 @@ test01()
   auto bhd3 = std::bind(hd3, eng);
   testDiscreteDist(bhd3, [](int k)
 		   { return hypergeometric_pdf(k, 100, 20, 5); });
+#endif
 }
 
 int
-- 
-----------------------------------------------------------------------------
Rainer Orth, Center for Biotechnology, Bielefeld University

Reply via email to