libstdc++: Fix range access for empty std::valarray [PR103022]
authorJonathan Wakely <jwakely@redhat.com>
Mon, 1 Nov 2021 11:06:51 +0000 (11:06 +0000)
committerJonathan Wakely <jwakely@redhat.com>
Mon, 1 Nov 2021 13:26:29 +0000 (13:26 +0000)
commit91bac9fed5d082f0b180834110ebc0f46f97599a
treefee69d3a9ffe1e3a6252ea0e4e09132e8b068883
parentbc5baac5c37d8da1931043c4bbeffa3ab93a8e91
libstdc++: Fix range access for empty std::valarray [PR103022]

The std::begin and std::end overloads for std::valarray are defined in
terms of std::addressof(v[0]) which is undefined for an empty valarray.

libstdc++-v3/ChangeLog:

PR libstdc++/103022
* include/std/valarray (begin, end): Do not dereference an empty
valarray. Add noexcept and [[nodiscard]].
* testsuite/26_numerics/valarray/range_access.cc: Check empty
valarray. Check iterator properties. Run as well as compiling.
* testsuite/26_numerics/valarray/range_access2.cc: Likewise.
* testsuite/26_numerics/valarray/103022.cc: New test.
libstdc++-v3/include/std/valarray
libstdc++-v3/testsuite/26_numerics/valarray/103022.cc [new file with mode: 0644]
libstdc++-v3/testsuite/26_numerics/valarray/range_access.cc
libstdc++-v3/testsuite/26_numerics/valarray/range_access2.cc