diff options
author | Jonathan Wakely <jwakely@redhat.com> | 2021-11-22 14:51:16 +0000 |
---|---|---|
committer | Jonathan Wakely <jwakely@redhat.com> | 2021-11-23 21:23:24 +0000 |
commit | 39de0e541107bc4b0b3b82f613054f59c6821eb5 (patch) | |
tree | de02c6fefee5661c4a151905f93819b03c7d8c6e | |
parent | 16e95050f71e9fa408e9bd8ccd415b0e7adc66e5 (diff) | |
download | gcc-39de0e541107bc4b0b3b82f613054f59c6821eb5.zip gcc-39de0e541107bc4b0b3b82f613054f59c6821eb5.tar.gz gcc-39de0e541107bc4b0b3b82f613054f59c6821eb5.tar.bz2 |
libstdc++: Add effective-target for std::allocator implementation
This allows tests to be skipped if the std::allocator implementation is
not __gnu_cxx::new_allocator.
The 20_util/allocator/overaligned.cc test requires either C++17 or
new_allocator, otherwise we can't guarantee to return overaligned
memory.
libstdc++-v3/ChangeLog:
* testsuite/18_support/50594.cc: Check effective target.
* testsuite/20_util/allocator/1.cc: Likewise.
* testsuite/20_util/allocator/overaligned.cc: Likewise.
* testsuite/23_containers/unordered_map/96088.cc: Likewise.
* testsuite/23_containers/unordered_multimap/96088.cc: Likewise.
* testsuite/23_containers/unordered_multiset/96088.cc: Likewise.
* testsuite/23_containers/unordered_set/96088.cc: Likewise.
* testsuite/ext/throw_allocator/check_delete.cc: Likewise.
* testsuite/ext/throw_allocator/check_new.cc: Likewise.
* testsuite/lib/libstdc++.exp (check_effective_target_std_allocator_new):
Define new proc.
10 files changed, 19 insertions, 5 deletions
diff --git a/libstdc++-v3/testsuite/18_support/50594.cc b/libstdc++-v3/testsuite/18_support/50594.cc index a18e827..c15e704 100644 --- a/libstdc++-v3/testsuite/18_support/50594.cc +++ b/libstdc++-v3/testsuite/18_support/50594.cc @@ -1,5 +1,6 @@ // { dg-options "-fwhole-program" } // { dg-additional-options "-static-libstdc++" { target *-*-mingw* } } +// { dg-require-effective-target std_allocator_new } // { dg-xfail-run-if "AIX operator new" { powerpc-ibm-aix* } } // Copyright (C) 2011-2021 Free Software Foundation, Inc. diff --git a/libstdc++-v3/testsuite/20_util/allocator/1.cc b/libstdc++-v3/testsuite/20_util/allocator/1.cc index ebcd6c2..79e223c 100644 --- a/libstdc++-v3/testsuite/20_util/allocator/1.cc +++ b/libstdc++-v3/testsuite/20_util/allocator/1.cc @@ -17,6 +17,8 @@ // with this library; see the file COPYING3. If not see // <http://www.gnu.org/licenses/>. +// { dg-require-effective-target std_allocator_new } + // 20.4.1.1 allocator members #include <memory> @@ -35,7 +37,7 @@ struct gnu { }; bool check_new = false; bool check_delete = false; -void* +void* operator new(std::size_t n) THROW(std::bad_alloc) { check_new = true; @@ -59,9 +61,6 @@ void test01() { std::allocator<gnu> obj; - // NB: These should work for various size allocation and - // deallocations. Currently, they only work as expected for sizes > - // _MAX_BYTES as defined in stl_alloc.h, which happes to be 128. gnu* pobj = obj.allocate(256); VERIFY( check_new ); diff --git a/libstdc++-v3/testsuite/20_util/allocator/overaligned.cc b/libstdc++-v3/testsuite/20_util/allocator/overaligned.cc index fd03d62..8c90fcc 100644 --- a/libstdc++-v3/testsuite/20_util/allocator/overaligned.cc +++ b/libstdc++-v3/testsuite/20_util/allocator/overaligned.cc @@ -16,7 +16,7 @@ // <http://www.gnu.org/licenses/>. // { dg-options "-faligned-new" } -// { dg-do run { target c++11 } } +// { dg-do run { target { c++11 && { c++17 || std_allocator_new } } } } // { dg-require-cstdint "" } #include <memory> diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/96088.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/96088.cc index 83ca1c0..27c499e 100644 --- a/libstdc++-v3/testsuite/23_containers/unordered_map/96088.cc +++ b/libstdc++-v3/testsuite/23_containers/unordered_map/96088.cc @@ -1,4 +1,5 @@ // { dg-do run { target c++17 } } +// { dg-require-effective-target std_allocator_new } // Copyright (C) 2021 Free Software Foundation, Inc. // diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multimap/96088.cc b/libstdc++-v3/testsuite/23_containers/unordered_multimap/96088.cc index de7f009..eaadd08 100644 --- a/libstdc++-v3/testsuite/23_containers/unordered_multimap/96088.cc +++ b/libstdc++-v3/testsuite/23_containers/unordered_multimap/96088.cc @@ -1,4 +1,5 @@ // { dg-do run { target c++17 } } +// { dg-require-effective-target std_allocator_new } // Copyright (C) 2021 Free Software Foundation, Inc. // diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multiset/96088.cc b/libstdc++-v3/testsuite/23_containers/unordered_multiset/96088.cc index b9bbf63..aa137ec 100644 --- a/libstdc++-v3/testsuite/23_containers/unordered_multiset/96088.cc +++ b/libstdc++-v3/testsuite/23_containers/unordered_multiset/96088.cc @@ -1,4 +1,5 @@ // { dg-do run { target c++17 } } +// { dg-require-effective-target std_allocator_new } // Copyright (C) 2021 Free Software Foundation, Inc. // diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/96088.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/96088.cc index 83d5475..3f0835c 100644 --- a/libstdc++-v3/testsuite/23_containers/unordered_set/96088.cc +++ b/libstdc++-v3/testsuite/23_containers/unordered_set/96088.cc @@ -1,4 +1,5 @@ // { dg-do run { target c++17 } } +// { dg-require-effective-target std_allocator_new } // Copyright (C) 2021 Free Software Foundation, Inc. // diff --git a/libstdc++-v3/testsuite/ext/throw_allocator/check_delete.cc b/libstdc++-v3/testsuite/ext/throw_allocator/check_delete.cc index f5bc652..10e5c69 100644 --- a/libstdc++-v3/testsuite/ext/throw_allocator/check_delete.cc +++ b/libstdc++-v3/testsuite/ext/throw_allocator/check_delete.cc @@ -18,6 +18,7 @@ // { dg-require-time "" } // { dg-require-cstdint "" } +// { dg-require-effective-target std_allocator_new } #include <cstdlib> #include <ext/throw_allocator.h> diff --git a/libstdc++-v3/testsuite/ext/throw_allocator/check_new.cc b/libstdc++-v3/testsuite/ext/throw_allocator/check_new.cc index a4e3874..4e2a725 100644 --- a/libstdc++-v3/testsuite/ext/throw_allocator/check_new.cc +++ b/libstdc++-v3/testsuite/ext/throw_allocator/check_new.cc @@ -18,6 +18,7 @@ // { dg-require-time "" } // { dg-require-cstdint "" } +// { dg-require-effective-target std_allocator_new } #include <cstdlib> #include <ext/throw_allocator.h> diff --git a/libstdc++-v3/testsuite/lib/libstdc++.exp b/libstdc++-v3/testsuite/lib/libstdc++.exp index 35ccbe4..4f4c78b 100644 --- a/libstdc++-v3/testsuite/lib/libstdc++.exp +++ b/libstdc++-v3/testsuite/lib/libstdc++.exp @@ -1338,6 +1338,14 @@ proc check_effective_target_net_ts_ip { } { }] } +# Return 1 if libstdc++ was built as --enable-libstdcxx-allocator=new +proc check_effective_target_std_allocator_new { } { + return [check_v3_target_prop_cached et_std_alloc_new { + set cond "_GLIBCXX_USE_ALLOCATOR_NEW" + return [v3_check_preprocessor_condition std_alloc_new $cond] + }] +} + set additional_prunes "" if { [info exists env(GCC_RUNTEST_PARALLELIZE_DIR)] \ |