]> git.ipfire.org Git - thirdparty/gcc.git/commit
PR libstdc++/89164 enforce constraints for uninitialized algos
authorJonathan Wakely <jwakely@redhat.com>
Thu, 24 Oct 2019 12:54:58 +0000 (13:54 +0100)
committerJonathan Wakely <redi@gcc.gnu.org>
Thu, 24 Oct 2019 12:54:58 +0000 (13:54 +0100)
commitf061d690d8e15512540127dd43eb6f0bcf37cbb3
treeaf9e9f805b31c901c53ccf5cdbe5c6e3b3f40e50
parent8fa40f2cc3616f39a94ff58d95c4c4421fd39e2a
PR libstdc++/89164 enforce constraints for uninitialized algos

The memmove optimizations for std::uninitialized_copy/fill/_n will
compile even if the type is not copy constructible, because std::copy
doesn't require copy construction to work. But the uninitialized
algorithms do require it.

This adds explicit static assertions to ensure we don't allow ill-formed
initializations.

Backport from mainline
2019-08-30  Jonathan Wakely  <jwakely@redhat.com>

PR libstdc++/89164
* include/bits/stl_algobase.h (__copy_move): Give descriptive names
to template parameters.
* include/bits/stl_uninitialized.h (uninitialized_copy)
(uninitialized_fill, uninitialized_fill_n): Add static assertions to
diagnose invalid uses.
* testsuite/20_util/specialized_algorithms/uninitialized_copy/1.cc:
Adjust expected error.
* testsuite/20_util/specialized_algorithms/uninitialized_copy/89164.cc:
New test.
* testsuite/20_util/specialized_algorithms/uninitialized_copy_n/
89164.cc: New test.
* testsuite/20_util/specialized_algorithms/uninitialized_fill/89164.cc:
New test.
* testsuite/20_util/specialized_algorithms/uninitialized_fill_n/
89164.cc: New test.
* testsuite/23_containers/vector/cons/89164.cc: New test.
* testsuite/23_containers/vector/cons/89164_c++17.cc: New test.

From-SVN: r277388
libstdc++-v3/ChangeLog
libstdc++-v3/include/bits/stl_algobase.h
libstdc++-v3/include/bits/stl_uninitialized.h
libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy/1.cc
libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy/89164.cc [new file with mode: 0644]
libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy_n/89164.cc [new file with mode: 0644]
libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_fill/89164.cc [new file with mode: 0644]
libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_fill_n/89164.cc [new file with mode: 0644]
libstdc++-v3/testsuite/23_containers/vector/cons/89164.cc [new file with mode: 0644]
libstdc++-v3/testsuite/23_containers/vector/cons/89164_c++17.cc [new file with mode: 0644]