On Thu, 13 Jun 2024 at 08:27, Alexandre Oliva <ol...@adacore.com> wrote: > > > When !_GLIBCXX_USE_C99_MATH_TR1, binomial_distribution doesn't use the > optimized algorithm that was fixed in response to PR114359. Without > that optimized algorithm, operator() ends up looping very very long > for the test, to the point that it would time out by several orders of > magnitude, without even exercising the optimized algorithm that we're > testing for regressions. Arrange for the test to be skipped if that > bit won't be exercised. > > Regstrapped on x86_64-linux-gnu, also tested with gcc-13 > x-aarch64-rtems6, where the problem was detected. Ok to install?
OK. This finding suggests we shouldn't even bother defining binomial_distribution without the <cmath> functions. It doesn't seem useful if it's that slow (or is that just because this test uses 1<<30 as the t parameter?) Either way, the change to the test is fine. > > > for libstdc++-v3/ChangeLog > > PR libstdc++/114359 > * testsuite/26_numerics/random/binomial_distribution/114359.cc: > Require cmath. > --- > .../random/binomial_distribution/114359.cc | 13 +++++++++++++ > 1 file changed, 13 insertions(+) > > diff --git > a/libstdc++-v3/testsuite/26_numerics/random/binomial_distribution/114359.cc > b/libstdc++-v3/testsuite/26_numerics/random/binomial_distribution/114359.cc > index c1e4c380bf91d..12d967dcbfd34 100644 > --- > a/libstdc++-v3/testsuite/26_numerics/random/binomial_distribution/114359.cc > +++ > b/libstdc++-v3/testsuite/26_numerics/random/binomial_distribution/114359.cc > @@ -2,6 +2,19 @@ > > // Bug 114359 - std::binomial_distribution hangs in infinite loop > > +// { dg-require-cmath "" } > + > +// The requirement above is not strictly true. The test should work > +// without cmath, and it probably does, but without cmath, > +// binomial_distribution::operator() skips the optimized algorithm and > +// calls _M_waiting to loop a gazillion times. On aarch64-rtems6 > +// qemu, that loop takes over 5 minutes to go through a small fraction > +// of the iteration space (__x at 22k, limited at 1G; __sum at 2e-5, > +// limited at 0.69). The bug we're regression-testing here was in the > +// cmath-requiring bit, so even if this could conceivably not time out > +// on a really fast machine, there's hardly any reason to exercise > +// this extreme case. > + > #include <random> > > int main() > > -- > Alexandre Oliva, happy hacker https://FSFLA.org/blogs/lxo/ > Free Software Activist GNU Toolchain Engineer > More tolerance and less prejudice are key for inclusion and diversity > Excluding neuro-others for not behaving ""normal"" is *not* inclusive >