diff mbox

[v3] Fix ext/random/hypergeometric_distribution/operators/values.cc on Solaris 9

Message ID yddvbze7wym.fsf@lokon.CeBiTec.Uni-Bielefeld.DE
State New
Headers show

Commit Message

Rainer Orth Nov. 27, 2013, 2:14 p.m. UTC
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  <ro@CeBiTec.Uni-Bielefeld.DE>

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

Comments

Jonathan Wakely Nov. 27, 2013, 2:26 p.m. UTC | #1
On 27 November 2013 14:14, Rainer Orth wrote:
>
> Ok for mainline?

OK, thanks.
Paolo Carlini Nov. 27, 2013, 3:23 p.m. UTC | #2
Hi,

On 11/27/2013 03:14 PM, Rainer Orth wrote:
> 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?
Please use // { dg-require-cmath "" } instead.

Thanks,
Paolo.
diff mbox

Patch

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