[gcc r17-4535] libstdc++: Merge piecewise distributions configuration defines. [PR82749, PR125548]
Tomasz Kaminski
tkaminsk@gcc.gnu.org
Mon Sep 21 16:28:29 GMT 2026
https://gcc.gnu.org/g:2cb78d1a0e5bd0d831690296df0bc35128ae009c
commit r17-4535-g2cb78d1a0e5bd0d831690296df0bc35128ae009c
Author: Tomasz Kamiński <tkaminsk@redhat.com>
Date: Wed Sep 9 09:55:18 2026 +0200
libstdc++: Merge piecewise distributions configuration defines. [PR82749,PR125548]
This patch introduces _GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS that
replaces a separate _GLIBCXX_USE_OLD_PIECEWISE_DISTRIBUTIONS (value 0)
and _GLIBCXX_USE_RESULT_TYPE_FOR_PIECEWISE_DENSITIES (value 2).
This better reflects their behavior, as they were not orthogonal previously
as defining _GLIBCXX_USE_RESULT_TYPE_FOR_PIECEWISE_DENSITIES hand no effect
if _GLIBCXX_USE_OLD_PIECEWISE_DISTRIBUTIONS was defined.
libstdc++-v3/ChangeLog:
PR libstdc++/82749
PR libstdc++/125548
* doc/xml/manual/using.xml
(_GLIBCXX_USE_OLD_PIECEWISE_DISTRIBUTIONS)
(_GLIBCXX_USE_RESULT_TYPE_FOR_PIECEWISE_DENSITIES): Replace with...
(_GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS): Add entry.
* doc/html/manual/using_macros.html: Regenrate.
* include/bits/c++config (_GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS)
[__cplusplus >= 201103L]: Define to the value 1 if not already defined.
* include/bits/random.h
(__detail::__piecewise_distributions_storage)
(__detail::__piecewise_distributions_storage_t): Adjust to depend
on _GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS value.
(piecewise_constant_distribution::_CalcType)
(piecewise_linear_distribution::_CalcType)
(piecewise_constant_distribution::param_type::densities)
(piecewise_linear_distribution::param_type::densities):
Check for non-zero value of _GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS
instead of defintion of _GLIBCXX_USE_OLD_PIECEWISE_DISTRIBUTIONS and
reorder branches.
* include/bits/random.tcc
(piecewise_constant_distribution::param_type::param_type)
(piecewise_constant_distribution::param_type::param_type): Likewise.
* testsuite/26_numerics/random/piecewise_constant_distribution/operators/accessors.cc:
Replace checks for _GLIBCXX_USE_OLD_PIECEWISE_DISTRIBUTIONS
_GLIBCXX_USE_RESULT_TYPE_FOR_PIECEWISE_DENSITIES defintions
with checks of _GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS values.
* testsuite/26_numerics/random/piecewise_linear_distribution/operators/accessors.cc:
Likewise.
* testsuite/26_numerics/random/piecewise_linear_distribution/cons/pr125548.cc:
Likewise.
* testsuite/26_numerics/random/piecewise_constant_distribution/operators/accessors_fallback.cc:
Replace -D_GLIBCXX_USE_OLD_PIECEWISE_DISTRIBUTIONS with
-D_GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS=0.
* testsuite/26_numerics/random/piecewise_linear_distribution/operators/accessors_fallback.cc:
Likewise.
* testsuite/26_numerics/random/piecewise_linear_distribution/cons/pr125548_fallback.cc:
Likewise.
* testsuite/26_numerics/random/piecewise_constant_distribution/cons/input_type_fallback_neg.cc:
Likewise.
* testsuite/26_numerics/random/piecewise_linear_distribution/cons/input_type_fallback_neg.cc:
Likewise.
* testsuite/26_numerics/random/piecewise_constant_distribution/operators/accessors_exact.cc:
Replace -D_GLIBCXX_USE_RESULT_TYPE_FOR_PIECEWISE_DENSITIES with
-D_GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS=2.
* testsuite/26_numerics/random/piecewise_linear_distribution/operators/accessors_exact.cc:
Likewise.
Reviewed-by: Jonathan Wakely <jwakely@redhat.com>
Diff:
---
libstdc++-v3/doc/html/manual/using_macros.html | 35 ++++++++-------
libstdc++-v3/doc/xml/manual/using.xml | 38 ++++++++--------
libstdc++-v3/include/bits/c++config | 4 ++
libstdc++-v3/include/bits/random.h | 52 +++++++++++-----------
libstdc++-v3/include/bits/random.tcc | 18 ++++----
.../cons/input_type_fallback_neg.cc | 2 +-
.../operators/accessors.cc | 22 ++++-----
.../operators/accessors_exact.cc | 2 +-
.../operators/accessors_fallback.cc | 2 +-
.../cons/input_type_fallback_neg.cc | 2 +-
.../piecewise_linear_distribution/cons/pr125548.cc | 10 ++---
.../cons/pr125548_fallback.cc | 2 +-
.../operators/accessors.cc | 24 +++++-----
.../operators/accessors_exact.cc | 2 +-
.../operators/accessors_fallback.cc | 2 +-
15 files changed, 111 insertions(+), 106 deletions(-)
diff --git a/libstdc++-v3/doc/html/manual/using_macros.html b/libstdc++-v3/doc/html/manual/using_macros.html
index 6cb467471c8c..2f5824ef407d 100644
--- a/libstdc++-v3/doc/html/manual/using_macros.html
+++ b/libstdc++-v3/doc/html/manual/using_macros.html
@@ -156,25 +156,26 @@
<code class="option">-fexec-charset=UTF-8</code> so might give incorrect results
if called from a source file that uses a non-Unicode encoding,
especially for format strings using non-ASCII fill characters.
- </p></dd><dt><span class="term"><code class="code">_GLIBCXX_USE_OLD_PIECEWISE_DISTRIBUTIONS</code></span></dt><dd><p>
- Undefined by default.
- When defined, the behavior of specializations of
+ </p></dd><dt><span class="term"><code class="code">_GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS</code></span></dt><dd><p>
+ Defined to the value <code class="literal">1</code>, if not provided.
+ ABI-changing when defined to the value <code class="literal">2</code>.
+
+ When defined to a non-zero value,
<code class="code">piecewise_constant_distribution</code> and
- <code class="code">piecewise_linear_distribution</code>
- is restored to their state prior the implementation
- of <a class="link" href="https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82749" target="_top">
- PR82749</a> (<a class="link" href="https://cplusplus.github.io/LWG/lwg-defects.html#1439" target="_top">
- LWG1439</a>), <a class="link" href="https://cplusplus.github.io/LWG/lwg-defects.html#4052" target="_top">
+ <code class="code">piecewise_linear_distribution</code> incorporates corrections
+ from <a class="link" href="https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82749" target="_top">
+ PR82749</a> (<a class="link" href="https://cplusplus.github.io/LWG/lwg-defects.html#1439" target="_top">LWG1439</a>), <a class="link" href="https://cplusplus.github.io/LWG/lwg-defects.html#4052" target="_top">
LWG4052</a>, and <a class="link" href="https://gcc.gnu.org/bugzilla/show_bug.cgi?id=125548" target="_top">
- PR125548</a>) in GCC 17.
- </p></dd><dt><span class="term"><code class="code">_GLIBCXX_USE_RESULT_TYPE_FOR_PIECEWISE_DENSITIES</code></span></dt><dd><p>
- Undefined by default. ABI-changing.
- When defined, specializations of
- <code class="code">piecewise_constant_distribution</code> and
- <code class="code">piecewise_linear_distribution</code> with a
- <code class="code">result_type</code> of either <code class="code">float</code> or
- <code class="code">long double</code> will manage their internal state using
- <code class="code">result_type</code> values (instead of <code class="code">double</code>).
+ PR125548</a> in GCC 17.
+ </p><p>
+ When defined to the value <code class="literal">0</code>, their behavior
+ is restored to their state prior changes in GCC 17.
+ </p><p>
+ When defined to the value <code class="literal">2</code>, specializations of
+ beforementioned distributions with a <code class="code">result_type</code> of
+ either <code class="code">float</code> or <code class="code">long double</code> will manage
+ their internal state using <code class="code">result_type</code> values (instead
+ of <code class="code">double</code>).
This is required for standard conformance, but is incompatible with
the default implementation of those class templates.
</p></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="using_headers.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="using.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="using_dual_abi.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Headers </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Dual ABI</td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/libstdc++-v3/doc/xml/manual/using.xml b/libstdc++-v3/doc/xml/manual/using.xml
index da710be408f0..9cb93ec76d50 100644
--- a/libstdc++-v3/doc/xml/manual/using.xml
+++ b/libstdc++-v3/doc/xml/manual/using.xml
@@ -1379,35 +1379,35 @@ g++ -Winvalid-pch -I. -include stdc++.h -H -g -O2 hello.cc -o test.exe
especially for format strings using non-ASCII fill characters.
</para>
</listitem></varlistentry>
- <varlistentry><term><code>_GLIBCXX_USE_OLD_PIECEWISE_DISTRIBUTIONS</code></term>
+ <varlistentry><term><code>_GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS</code></term>
<listitem>
<para>
- Undefined by default.
- When defined, the behavior of specializations of
+ Defined to the value <literal>1</literal>, if not provided.
+ ABI-changing when defined to the value <literal>2</literal>.
+
+ When defined to a non-zero value,
<code>piecewise_constant_distribution</code> and
- <code>piecewise_linear_distribution</code>
- is restored to their state prior the implementation
- of <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ <code>piecewise_linear_distribution</code> incorporates corrections
+ from <link xmlns:xlink="http://www.w3.org/1999/xlink"
xlink:href="https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82749">
PR82749</link> (<link xmlns:xlink="http://www.w3.org/1999/xlink"
- xlink:href="https://cplusplus.github.io/LWG/lwg-defects.html#1439">
- LWG1439</link>), <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="https://cplusplus.github.io/LWG/lwg-defects.html#1439"
+ >LWG1439</link>), <link xmlns:xlink="http://www.w3.org/1999/xlink"
xlink:href="https://cplusplus.github.io/LWG/lwg-defects.html#4052">
LWG4052</link>, and <link xmlns:xlink="http://www.w3.org/1999/xlink"
xlink:href="https://gcc.gnu.org/bugzilla/show_bug.cgi?id=125548">
- PR125548</link>) in GCC 17.
+ PR125548</link> in GCC 17.
</para>
- </listitem></varlistentry>
- <varlistentry><term><code>_GLIBCXX_USE_RESULT_TYPE_FOR_PIECEWISE_DENSITIES</code></term>
- <listitem>
<para>
- Undefined by default. ABI-changing.
- When defined, specializations of
- <code>piecewise_constant_distribution</code> and
- <code>piecewise_linear_distribution</code> with a
- <code>result_type</code> of either <code>float</code> or
- <code>long double</code> will manage their internal state using
- <code>result_type</code> values (instead of <code>double</code>).
+ When defined to the value <literal>0</literal>, their behavior
+ is restored to their state prior changes in GCC 17.
+ </para>
+ <para>
+ When defined to the value <literal>2</literal>, specializations of
+ beforementioned distributions with a <code>result_type</code> of
+ either <code>float</code> or <code>long double</code> will manage
+ their internal state using <code>result_type</code> values (instead
+ of <code>double</code>).
This is required for standard conformance, but is incompatible with
the default implementation of those class templates.
</para>
diff --git a/libstdc++-v3/include/bits/c++config b/libstdc++-v3/include/bits/c++config
index 60456a48681e..0c2407ccd07c 100644
--- a/libstdc++-v3/include/bits/c++config
+++ b/libstdc++-v3/include/bits/c++config
@@ -969,6 +969,10 @@ namespace __gnu_cxx
#endif // __has_include
#endif // C++17
+#if __cplusplus >= 201103L && !defined(_GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS)
+# define _GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS 1
+#endif
+
#pragma GCC diagnostic pop
// End of prewritten config; the settings discovered at configure time follow.
diff --git a/libstdc++-v3/include/bits/random.h b/libstdc++-v3/include/bits/random.h
index e2b29961bd92..f3b8e6c244e1 100644
--- a/libstdc++-v3/include/bits/random.h
+++ b/libstdc++-v3/include/bits/random.h
@@ -6440,10 +6440,10 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
namespace __detail
{
-#if defined(_GLIBCXX_USE_OLD_PIECEWISE_DISTRIBUTIONS)
+#if _GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS == 0
template<typename _Tp>
using __piecewise_distributions_storage_t = double;
-#elif defined(_GLIBCXX_USE_RESULT_TYPE_FOR_PIECEWISE_DENSITIES)
+#elif _GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS == 2
template<typename _Tp>
using __piecewise_distributions_storage_t = _Tp;
#else
@@ -6499,10 +6499,10 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
using _StorageType
= __detail::__piecewise_distributions_storage_t<_RealType>;
-#ifdef _GLIBCXX_USE_OLD_PIECEWISE_DISTRIBUTIONS
- using _CalcType = double;
-#else
+#if _GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS
using _CalcType = _RealType;
+#else
+ using _CalcType = double;
#endif
public:
@@ -6548,11 +6548,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
return _M_int;
}
-#ifdef _GLIBCXX_USE_OLD_PIECEWISE_DISTRIBUTIONS
- std::vector<double>
- densities() const
- { return _M_den.empty() ? std::vector<double>(1, 1.0) : _M_den; }
-#else
+#if _GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS
// _GLIBCXX_RESOLVE_LIB_DEFECTS
// 1439. Return from densities() functions?
[[__gnu__::__abi_tag__("__rt")]]
@@ -6569,6 +6565,10 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
return std::vector<_RealType>(_M_den.begin(), _M_den.end());
#pragma GCC diagnostic pop
}
+#else
+ std::vector<double>
+ densities() const
+ { return _M_den.empty() ? std::vector<double>(1, 1.0) : _M_den; }
#endif
friend bool
@@ -6644,13 +6644,13 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
/**
* @brief Returns a vector of the probability densities.
*/
-#ifdef _GLIBCXX_USE_OLD_PIECEWISE_DISTRIBUTIONS
- std::vector<double>
+#if _GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS
+ [[__gnu__::__always_inline__]]
+ std::vector<result_type>
densities() const
{ return _M_param.densities(); }
#else
- [[__gnu__::__always_inline__]]
- std::vector<result_type>
+ std::vector<double>
densities() const
{ return _M_param.densities(); }
#endif
@@ -6814,10 +6814,10 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
using _StorageType
= __detail::__piecewise_distributions_storage_t<_RealType>;
-#ifdef _GLIBCXX_USE_OLD_PIECEWISE_DISTRIBUTIONS
- using _CalcType = double;
-#else
+#if _GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS
using _CalcType = _RealType;
+#else
+ using _CalcType = double;
#endif
public:
@@ -6863,11 +6863,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
return _M_int;
}
-#ifdef _GLIBCXX_USE_OLD_PIECEWISE_DISTRIBUTIONS
- std::vector<double>
- densities() const
- { return _M_den.empty() ? std::vector<double>(2, 1.0) : _M_den; }
-#else
+#if _GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS
// _GLIBCXX_RESOLVE_LIB_DEFECTS
// 1439. Return from densities() functions?
[[__gnu__::__abi_tag__("__rt")]]
@@ -6884,6 +6880,10 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
return std::vector<_RealType>(_M_den.begin(), _M_den.end());
#pragma GCC diagnostic pop
}
+#else
+ std::vector<double>
+ densities() const
+ { return _M_den.empty() ? std::vector<double>(2, 1.0) : _M_den; }
#endif
friend bool
@@ -6961,13 +6961,13 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
* @brief Return a vector of the probability densities of the
* distribution.
*/
-#ifdef _GLIBCXX_USE_OLD_PIECEWISE_DISTRIBUTIONS
- std::vector<double>
+#if _GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS
+ [[__gnu__::__always_inline__]]
+ std::vector<result_type>
densities() const
{ return _M_param.densities(); }
#else
- [[__gnu__::__always_inline__]]
- std::vector<result_type>
+ std::vector<double>
densities() const
{ return _M_param.densities(); }
#endif
diff --git a/libstdc++-v3/include/bits/random.tcc b/libstdc++-v3/include/bits/random.tcc
index b2b18e66f5f1..ab4bb09dc3d0 100644
--- a/libstdc++-v3/include/bits/random.tcc
+++ b/libstdc++-v3/include/bits/random.tcc
@@ -3065,10 +3065,10 @@ namespace __detail
// 4052. Bogus requirements for piecewise_linear_distribution
auto __cfw = [&__fw](_RealType __n, _RealType __p)
{
-#ifdef _GLIBCXX_USE_OLD_PIECEWISE_DISTRIBUTIONS
- return __fw(0.5 * (__n + __p));
-#else
+#if _GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS
return _RealType(__fw(_RealType(0.5) * (__n + __p)));
+#else
+ return __fw(0.5 * (__n + __p));
#endif
};
@@ -3098,10 +3098,10 @@ namespace __detail
const _RealType __delta = (__xmax - __xmin) / __n;
auto __cfw = [&__fw, __delta](_RealType __v)
{
-#ifdef _GLIBCXX_USE_OLD_PIECEWISE_DISTRIBUTIONS
- return __fw(__v + 0.5 * __delta);
-#else
+#if _GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS
return _RealType(__fw(__v + _RealType(0.5) * __delta));
+#else
+ return __fw(__v + 0.5 * __delta);
#endif
};
@@ -3380,12 +3380,12 @@ namespace __detail
const _RealType __delta = (__xmax - __xmin) / __n;
const auto __cfw = [&] (_RealType __v)
{
-#ifdef _GLIBCXX_USE_OLD_PIECEWISE_DISTRIBUTIONS
- return __fw(__v + __delta);
-#else
+#if _GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS
// _GLIBCXX_RESOLVE_LIB_DEFECTS
// 4052. Bogus requirements for piecewise_linear_distribution
return _RealType(__fw(__v));
+#else
+ return __fw(__v + __delta);
#endif
};
diff --git a/libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/cons/input_type_fallback_neg.cc b/libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/cons/input_type_fallback_neg.cc
index 6fb04ef7655f..3dfba49d7f9e 100644
--- a/libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/cons/input_type_fallback_neg.cc
+++ b/libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/cons/input_type_fallback_neg.cc
@@ -1,4 +1,4 @@
-// { dg-options "-D_GLIBCXX_USE_OLD_PIECEWISE_DISTRIBUTIONS" }
+// { dg-options "-D_GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS=0" }
// { dg-do compile { target c++11 } }
// { dg-require-cstdint "" }
diff --git a/libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/operators/accessors.cc b/libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/operators/accessors.cc
index b31b028dc27d..f8034ef08a0c 100644
--- a/libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/operators/accessors.cc
+++ b/libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/operators/accessors.cc
@@ -19,10 +19,10 @@ test_exact()
VERIFY( interval[0] == RealType(0.0) );
VERIFY( interval[5] == RealType(5.0) );
-#ifdef _GLIBCXX_USE_OLD_PIECEWISE_DISTRIBUTIONS
- const std::vector<double>& density = u.densities();
-#else
+#if _GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS
const std::vector<RealType>& density = u.densities();
+#else
+ const std::vector<double>& density = u.densities();
#endif
VERIFY( density.size() == 5 );
@@ -38,9 +38,9 @@ void
test_precision_depended()
{
constexpr bool preserved
-#ifdef _GLIBCXX_USE_OLD_PIECEWISE_DISTRIBUTIONS
+#if _GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS == 0
= sizeof(InputType) <= sizeof(double);
-#elifdef _GLIBCXX_USE_RESULT_TYPE_FOR_PIECEWISE_DENSITIES
+#elif _GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS == 2
= sizeof(InputType) <= sizeof(DistType);
#else
// input is converted to DistType and stored in double
@@ -61,10 +61,10 @@ test_precision_depended()
VERIFY( interval[0] == DistType(0.0) );
VERIFY( interval[2] == DistType(1.0) );
-#ifdef _GLIBCXX_USE_OLD_PIECEWISE_DISTRIBUTIONS
- const std::vector<double>& density = dist.densities();
-#else
+#if _GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS
const std::vector<DistType>& density = dist.densities();
+#else
+ const std::vector<double>& density = dist.densities();
#endif
VERIFY( density.size() == 2 );
@@ -91,10 +91,10 @@ test_engine_calls()
{
constexpr std::size_t bits = __builtin_popcountg(URBG::max() - URBG::min());
constexpr std::size_t calls
-#ifdef _GLIBCXX_USE_OLD_PIECEWISE_DISTRIBUTIONS
- = (std::numeric_limits<double>::digits + bits - 1) / bits;
-#else
+#if _GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS
= (std::numeric_limits<RealType>::digits + bits - 1) / bits;
+#else
+ = (std::numeric_limits<double>::digits + bits - 1) / bits;
#endif
struct wrapper : URBG
diff --git a/libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/operators/accessors_exact.cc b/libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/operators/accessors_exact.cc
index 469ed3fac469..e8e00acab737 100644
--- a/libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/operators/accessors_exact.cc
+++ b/libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/operators/accessors_exact.cc
@@ -1,4 +1,4 @@
-// { dg-options "-D_GLIBCXX_USE_RESULT_TYPE_FOR_PIECEWISE_DENSITIES" }
+// { dg-options "-D_GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS=2" }
// { dg-do run { target c++11 } }
// { dg-require-cstdint "" }
#include "accessors.cc"
diff --git a/libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/operators/accessors_fallback.cc b/libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/operators/accessors_fallback.cc
index 1f7269a879cd..b803786368fb 100644
--- a/libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/operators/accessors_fallback.cc
+++ b/libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/operators/accessors_fallback.cc
@@ -1,4 +1,4 @@
-// { dg-options "-D_GLIBCXX_USE_OLD_PIECEWISE_DISTRIBUTIONS" }
+// { dg-options "-D_GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS=0" }
// { dg-do run { target c++11 } }
// { dg-require-cstdint "" }
#include "accessors.cc"
diff --git a/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/cons/input_type_fallback_neg.cc b/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/cons/input_type_fallback_neg.cc
index 48ae22b87bb3..4bc9ca2704ec 100644
--- a/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/cons/input_type_fallback_neg.cc
+++ b/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/cons/input_type_fallback_neg.cc
@@ -1,4 +1,4 @@
-// { dg-options "-D_GLIBCXX_USE_OLD_PIECEWISE_DISTRIBUTIONS" }
+// { dg-options "-D_GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS=0" }
// { dg-do compile { target c++11 } }
// { dg-require-cstdint "" }
diff --git a/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/cons/pr125548.cc b/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/cons/pr125548.cc
index 2d7ae555eaa7..469ce7916c1c 100644
--- a/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/cons/pr125548.cc
+++ b/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/cons/pr125548.cc
@@ -4,18 +4,18 @@
#include <random>
#include <testsuite_hooks.h>
-void
+void
test_functor(int n)
{
const double step = 1.0/n;
-#ifdef _GLIBCXX_USE_OLD_PIECEWISE_DISTRIBUTIONS
- double expected = step;
-#else
+#if _GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS
double expected = 0.0;
+#else
+ double expected = step;
#endif
auto check_val = [&] (double value) mutable {
- VERIFY( value == expected );
+ VERIFY( value == expected );
expected += step;
return value;
};
diff --git a/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/cons/pr125548_fallback.cc b/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/cons/pr125548_fallback.cc
index 4b8e66585700..84cb8bad1adc 100644
--- a/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/cons/pr125548_fallback.cc
+++ b/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/cons/pr125548_fallback.cc
@@ -1,4 +1,4 @@
-// { dg-options "-D_GLIBCXX_USE_OLD_PIECEWISE_DISTRIBUTIONS" }
+// { dg-options "-D_GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS=0" }
// { dg-do run { target c++11 } }
// { dg-require-cstdint "" }
#include "pr125548.cc"
diff --git a/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/operators/accessors.cc b/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/operators/accessors.cc
index 5da22fc10113..d94155f0020c 100644
--- a/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/operators/accessors.cc
+++ b/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/operators/accessors.cc
@@ -19,10 +19,10 @@ test_exact()
VERIFY( interval[0] == RealType(0.0) );
VERIFY( interval[5] == RealType(5.0) );
-#ifdef _GLIBCXX_USE_OLD_PIECEWISE_DISTRIBUTIONS
- const std::vector<double>& density = u.densities();
-#else
+#if _GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS
const std::vector<RealType>& density = u.densities();
+#else
+ const std::vector<double>& density = u.densities();
#endif
VERIFY( density.size() == 6 );
@@ -39,9 +39,9 @@ void
test_precision_depended()
{
constexpr bool preserved
-#ifdef _GLIBCXX_USE_OLD_PIECEWISE_DISTRIBUTIONS
+#if _GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS == 0
= sizeof(InputType) <= sizeof(double);
-#elifdef _GLIBCXX_USE_RESULT_TYPE_FOR_PIECEWISE_DENSITIES
+#elif _GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS == 2
= sizeof(InputType) <= sizeof(DistType);
#else
// input is converted to DistType and stored in double
@@ -62,10 +62,10 @@ test_precision_depended()
VERIFY( interval[0] == DistType(0.0) );
VERIFY( interval[2] == DistType(1.0) );
-#ifdef _GLIBCXX_USE_OLD_PIECEWISE_DISTRIBUTIONS
- const std::vector<double>& density = dist.densities();
-#else
+#if _GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS
const std::vector<DistType>& density = dist.densities();
+#else
+ const std::vector<double>& density = dist.densities();
#endif
VERIFY( density.size() == 3 );
@@ -83,7 +83,7 @@ test_precision_depended()
Distribution from_init_list(x, wf);
validate(from_init_list);
-#ifndef _GLIBCXX_USE_OLD_PIECEWISE_DISTRIBUTIONS
+#if _GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS
// PR125548 leads to incorrect densities being used
Distribution from_count(2, InputType(0), InputType(1), wf);
validate(from_count);
@@ -96,10 +96,10 @@ test_engine_calls()
{
constexpr std::size_t bits = __builtin_popcountg(URBG::max() - URBG::min());
constexpr std::size_t calls
-#ifdef _GLIBCXX_USE_OLD_PIECEWISE_DISTRIBUTIONS
- = (std::numeric_limits<double>::digits + bits - 1) / bits;
-#else
+#if _GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS
= (std::numeric_limits<RealType>::digits + bits - 1) / bits;
+#else
+ = (std::numeric_limits<double>::digits + bits - 1) / bits;
#endif
struct wrapper : URBG
diff --git a/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/operators/accessors_exact.cc b/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/operators/accessors_exact.cc
index 469ed3fac469..e8e00acab737 100644
--- a/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/operators/accessors_exact.cc
+++ b/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/operators/accessors_exact.cc
@@ -1,4 +1,4 @@
-// { dg-options "-D_GLIBCXX_USE_RESULT_TYPE_FOR_PIECEWISE_DENSITIES" }
+// { dg-options "-D_GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS=2" }
// { dg-do run { target c++11 } }
// { dg-require-cstdint "" }
#include "accessors.cc"
diff --git a/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/operators/accessors_fallback.cc b/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/operators/accessors_fallback.cc
index 1f7269a879cd..b803786368fb 100644
--- a/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/operators/accessors_fallback.cc
+++ b/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/operators/accessors_fallback.cc
@@ -1,4 +1,4 @@
-// { dg-options "-D_GLIBCXX_USE_OLD_PIECEWISE_DISTRIBUTIONS" }
+// { dg-options "-D_GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS=0" }
// { dg-do run { target c++11 } }
// { dg-require-cstdint "" }
#include "accessors.cc"
More information about the Libstdc++-cvs
mailing list