[PATCH] PR libstdc++/87641 correctly initialize accumulator in valarray::sum()

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

[PATCH] PR libstdc++/87641 correctly initialize accumulator in valarray::sum()

Jonathan Wakely-3
Use the value of the first element as the initial value of the
__valarray_sum accumulator. Value-initialization might not create the
additive identity for the value type.

Make a similar change to __valarray_product even though it's only ever
used internally with a value_type of size_t.

        PR libstdc++/87641
        * include/bits/valarray_array.h (__valarray_sum): Use first element
        to initialize accumulator instead of value-initializing it.
        (__valarray_product<_Tp>): Move to ...
        * src/c++98/valarray.cc (__valarray_product<_Tp>): Here. Use first
        element to initialize accumulator.
        (__valarray_product(const valarray<size_t>&)): Remove const_cast made
        unnecessary by LWG 389.
        * testsuite/26_numerics/valarray/87641.cc: New test.

Tested powerpc64le-linux, committed to trunk.

This seems perfectly safe so I'll backport this to the branches too,
without the changes to __valarray_product.


patch.txt (5K) Download Attachment