From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-1.mimecast.com (us-smtp-delivery-1.mimecast.com [205.139.110.120]) by sourceware.org (Postfix) with ESMTP id CF9373857807 for ; Tue, 25 Aug 2020 15:45:41 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org CF9373857807 Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-228-81yHSXKmPjeUxvlfkPH-Gw-1; Tue, 25 Aug 2020 11:45:39 -0400 X-MC-Unique: 81yHSXKmPjeUxvlfkPH-Gw-1 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 45E2A1084C9B; Tue, 25 Aug 2020 15:45:38 +0000 (UTC) Received: from localhost (unknown [10.33.36.61]) by smtp.corp.redhat.com (Postfix) with ESMTP id 895F21944D; Tue, 25 Aug 2020 15:45:37 +0000 (UTC) Date: Tue, 25 Aug 2020 16:45:36 +0100 From: Jonathan Wakely To: libstdc++@gcc.gnu.org, gcc-patches@gcc.gnu.org Subject: Re: [committed] libstdc++: Make self-move well-defined for containers [PR 85828] Message-ID: <20200825154536.GG3400@redhat.com> References: <20200812193736.GA3299671@redhat.com> MIME-Version: 1.0 In-Reply-To: <20200812193736.GA3299671@redhat.com> X-Clacks-Overhead: GNU Terry Pratchett X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-Mimecast-Spam-Score: 0.001 X-Mimecast-Originator: redhat.com Content-Type: multipart/mixed; boundary="4vgOdmpzXGVCiUly" Content-Disposition: inline X-Spam-Status: No, score=-13.5 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=unavailable autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 25 Aug 2020 15:45:46 -0000 --4vgOdmpzXGVCiUly Content-Type: text/plain; charset=us-ascii; format=flowed Content-Disposition: inline On 12/08/20 20:37 +0100, Jonathan Wakely wrote: >The C++ LWG recently confirmed that self-move assignment should not have >undefined behaviour for standard containers (see the proposed resolution >of LWG 2839). The result should be a valid but unspecified value, just >like other times when a container is moved from. > >Our std::list, std::__cxx11::basic_string and unordered containers all >have bugs which result in undefined behaviour. > >For std::list the problem is that we clear the previous contents using >_M_clear() instead of clear(). This means the _M_next, _M_prev and >_M_size members are not zeroed, and so after we "update" them (with >their existing values), we are left with dangling pointers and a >non-zero size, but no elements. > >For the unordered containers the problem is similar. _Hashtable first >deallocates the existing contents, then takes ownership of the pointers >from the RHS object (which has just had its contents deallocated so the >pointers are dangling). > >For std::basic_string it's a little more subtle. When the string is >local (i.e. fits in the SSO buffer) we use char_traits::copy to copy the >contents from this->data() to __rhs.data(). When &__rhs == this that >copy violates the precondition that the ranges don't overlap. We only >need to check for self-move for this case where it's local, because the >only other case that can be true for self-move is that it's non-local >but the allocators compare equal. In that case the data pointer is >neither deallocated nor leaked, so the result is well-defined. > >This patch also makes a small optimization for std::deque move >assignment, to use the efficient move when is_always_equal is false, but >the allocators compare equal at runtime. > >Finally, we need to remove all the Debug Mode checks which abort the >program when a self-move is detected, because it's not undefined to do >that. > >Before PR 85828 can be closed we should also look into fixing >std::shuffle so it doesn't do any redundant self-swaps. > >libstdc++-v3/ChangeLog: > > PR libstdc++/85828 > * include/bits/basic_string.h (operator=(basic_string&&)): Check > for self-move before copying with char_traits::copy. > * include/bits/hashtable.h (operator=(_Hashtable&&)): Check for > self-move. > * include/bits/stl_deque.h (_M_move_assign1(deque&&, false_type)): > Check for equal allocators. > * include/bits/stl_list.h (_M_move_assign(list&&, true_type)): > Call clear() instead of _M_clear(). > * include/debug/formatter.h (__msg_self_move_assign): Change > comment. > * include/debug/macros.h (__glibcxx_check_self_move_assign): > (_GLIBCXX_DEBUG_VERIFY): Remove. > * include/debug/safe_container.h (operator=(_Safe_container&&)): > Remove assertion check for safe move and make it well-defined. > * include/debug/safe_iterator.h (operator=(_Safe_iterator&&)): > Remove assertion check for self-move. > * include/debug/safe_local_iterator.h > (operator=(_Safe_local_iterator&&)): Likewise. > * testsuite/21_strings/basic_string/cons/char/self_move.cc: New test. > * testsuite/23_containers/deque/cons/self_move.cc: New test. > * testsuite/23_containers/forward_list/cons/self_move.cc: New test. > * testsuite/23_containers/list/cons/self_move.cc: New test. > * testsuite/23_containers/set/cons/self_move.cc: New test. > * testsuite/23_containers/unordered_set/cons/self_move.cc: New test. > * testsuite/23_containers/vector/cons/self_move.cc: New test. > This removes all the existing tests that expect a debug mode failure that no longer happens. Tested powerpc64le-linux. Committed to trunk. --4vgOdmpzXGVCiUly Content-Type: text/x-patch; charset=us-ascii Content-Disposition: attachment; filename="patch.txt" commit 24f2764521d8f27760f03f626a4f20f4c82b7c73 Author: Jonathan Wakely Date: Tue Aug 25 16:30:45 2020 libstdc++: Remove tests for self-move debug assertions I recently removed the debug mode checks for self-move assignment, which means these tests now fail when _GLIBCXX_DEBUG is added to the options or when the check-debug target is used. Remove all the tests. libstdc++-v3/ChangeLog: * testsuite/21_strings/debug/iterator_self_move_assign_neg.cc: Removed. * testsuite/21_strings/debug/self_move_assign_neg.cc: Removed. * testsuite/23_containers/deque/debug/iterator_self_move_assign_neg.cc: Removed. * testsuite/23_containers/deque/debug/self_move_assign_neg.cc: Removed. * testsuite/23_containers/forward_list/debug/iterator_self_move_assign_neg.cc: Removed. * testsuite/23_containers/forward_list/debug/self_move_assign_neg.cc: Removed. * testsuite/23_containers/list/debug/iterator_self_move_assign_neg.cc: Removed. * testsuite/23_containers/list/debug/self_move_assign_neg.cc: Removed. * testsuite/23_containers/map/debug/iterator_self_move_assign_neg.cc: Removed. * testsuite/23_containers/map/debug/self_move_assign_neg.cc: Removed. * testsuite/23_containers/multimap/debug/iterator_self_move_assign_neg.cc: Removed. * testsuite/23_containers/multimap/debug/self_move_assign_neg.cc: Removed. * testsuite/23_containers/multiset/debug/iterator_self_move_assign_neg.cc: Removed. * testsuite/23_containers/multiset/debug/self_move_assign_neg.cc: Removed. * testsuite/23_containers/set/debug/iterator_self_move_assign_neg.cc: Removed. * testsuite/23_containers/set/debug/self_move_assign_neg.cc: Removed. * testsuite/23_containers/unordered_map/debug/iterator_self_move_assign_neg.cc: Removed. * testsuite/23_containers/unordered_map/debug/self_move_assign_neg.cc: Removed. * testsuite/23_containers/unordered_multimap/debug/iterator_self_move_assign_neg.cc: Removed. * testsuite/23_containers/unordered_multimap/debug/self_move_assign_neg.cc: Removed. * testsuite/23_containers/unordered_multiset/debug/iterator_self_move_assign_neg.cc: Removed. * testsuite/23_containers/unordered_multiset/debug/self_move_assign_neg.cc: Removed. * testsuite/23_containers/unordered_set/debug/iterator_self_move_assign_neg.cc: Removed. * testsuite/23_containers/unordered_set/debug/self_move_assign_neg.cc: Removed. * testsuite/23_containers/vector/debug/iterator_self_move_assign_neg.cc: Removed. * testsuite/23_containers/vector/debug/self_move_assign_neg.cc: Removed. diff --git a/libstdc++-v3/testsuite/21_strings/debug/iterator_self_move_assign_neg.cc b/libstdc++-v3/testsuite/21_strings/debug/iterator_self_move_assign_neg.cc deleted file mode 100644 index 1d031df9973..00000000000 --- a/libstdc++-v3/testsuite/21_strings/debug/iterator_self_move_assign_neg.cc +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright (C) 2012-2020 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING3. If not see -// . -// -// { dg-do run { xfail *-*-* } } -// { dg-require-debug-mode "" } -// { dg-options "-std=gnu++11" } - -#include - -void test01() -{ - __gnu_debug::string s1; - auto it1 = s1.begin(); - it1 = std::move(it1); -} - -int main() -{ - test01(); - return 0; -} diff --git a/libstdc++-v3/testsuite/21_strings/debug/self_move_assign_neg.cc b/libstdc++-v3/testsuite/21_strings/debug/self_move_assign_neg.cc deleted file mode 100644 index 982e0f636c5..00000000000 --- a/libstdc++-v3/testsuite/21_strings/debug/self_move_assign_neg.cc +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (C) 2012-2020 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING3. If not see -// . -// -// { dg-do run { xfail *-*-* } } -// { dg-require-debug-mode "" } -// { dg-options "-std=gnu++11" } - -#include - -void test01() -{ - __gnu_debug::string s1; - s1 = std::move(s1); -} - -int main() -{ - test01(); - return 0; -} diff --git a/libstdc++-v3/testsuite/23_containers/deque/debug/iterator_self_move_assign_neg.cc b/libstdc++-v3/testsuite/23_containers/deque/debug/iterator_self_move_assign_neg.cc deleted file mode 100644 index 2a59e2721d7..00000000000 --- a/libstdc++-v3/testsuite/23_containers/deque/debug/iterator_self_move_assign_neg.cc +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (C) 2012-2020 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING3. If not see -// . -// -// { dg-do run { target c++11 xfail *-*-* } } -// { dg-require-debug-mode "" } - -#include - -void test01() -{ - std::deque d1; - auto it1 = d1.begin(); - it1 = std::move(it1); -} - -int main() -{ - test01(); - return 0; -} diff --git a/libstdc++-v3/testsuite/23_containers/deque/debug/self_move_assign_neg.cc b/libstdc++-v3/testsuite/23_containers/deque/debug/self_move_assign_neg.cc deleted file mode 100644 index 9ac441774a0..00000000000 --- a/libstdc++-v3/testsuite/23_containers/deque/debug/self_move_assign_neg.cc +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (C) 2012-2020 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING3. If not see -// . -// -// { dg-do run { target c++11 xfail *-*-* } } -// { dg-require-debug-mode "" } - -#include - -void test01() -{ - std::deque d1; - d1 = std::move(d1); -} - -int main() -{ - test01(); - return 0; -} diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/debug/iterator_self_move_assign_neg.cc b/libstdc++-v3/testsuite/23_containers/forward_list/debug/iterator_self_move_assign_neg.cc deleted file mode 100644 index 9c08754cb26..00000000000 --- a/libstdc++-v3/testsuite/23_containers/forward_list/debug/iterator_self_move_assign_neg.cc +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (C) 2012-2020 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING3. If not see -// . -// -// { dg-do run { target c++11 xfail *-*-* } } -// { dg-require-debug-mode "" } - -#include - -void test01() -{ - std::forward_list fl1; - auto it1 = fl1.begin(); - it1 = std::move(it1); -} - -int main() -{ - test01(); - return 0; -} diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/debug/self_move_assign_neg.cc b/libstdc++-v3/testsuite/23_containers/forward_list/debug/self_move_assign_neg.cc deleted file mode 100644 index a65bd4a7477..00000000000 --- a/libstdc++-v3/testsuite/23_containers/forward_list/debug/self_move_assign_neg.cc +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (C) 2012-2020 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING3. If not see -// . -// -// { dg-do run { target c++11 xfail *-*-* } } -// { dg-require-debug-mode "" } - -#include - -void test01() -{ - std::forward_list fl1; - fl1 = std::move(fl1); -} - -int main() -{ - test01(); - return 0; -} diff --git a/libstdc++-v3/testsuite/23_containers/list/debug/iterator_self_move_assign_neg.cc b/libstdc++-v3/testsuite/23_containers/list/debug/iterator_self_move_assign_neg.cc deleted file mode 100644 index 6769a4e6772..00000000000 --- a/libstdc++-v3/testsuite/23_containers/list/debug/iterator_self_move_assign_neg.cc +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (C) 2012-2020 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING3. If not see -// . -// -// { dg-do run { target c++11 xfail *-*-* } } -// { dg-require-debug-mode "" } - -#include - -void test01() -{ - std::list l1; - auto it1 = l1.begin(); - it1 = std::move(it1); -} - -int main() -{ - test01(); - return 0; -} diff --git a/libstdc++-v3/testsuite/23_containers/list/debug/self_move_assign_neg.cc b/libstdc++-v3/testsuite/23_containers/list/debug/self_move_assign_neg.cc deleted file mode 100644 index 3e5330722c9..00000000000 --- a/libstdc++-v3/testsuite/23_containers/list/debug/self_move_assign_neg.cc +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (C) 2012-2020 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING3. If not see -// . -// -// { dg-do run { target c++11 xfail *-*-* } } -// { dg-require-debug-mode "" } - -#include - -void test01() -{ - std::list l1; - l1 = std::move(l1); -} - -int main() -{ - test01(); - return 0; -} diff --git a/libstdc++-v3/testsuite/23_containers/map/debug/iterator_self_move_assign_neg.cc b/libstdc++-v3/testsuite/23_containers/map/debug/iterator_self_move_assign_neg.cc deleted file mode 100644 index d2169725cc5..00000000000 --- a/libstdc++-v3/testsuite/23_containers/map/debug/iterator_self_move_assign_neg.cc +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (C) 2012-2020 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING3. If not see -// . -// -// { dg-do run { target c++11 xfail *-*-* } } -// { dg-require-debug-mode "" } - -#include - -void test01() -{ - std::map m1; - auto it1 = m1.begin(); - it1 = std::move(it1); -} - -int main() -{ - test01(); - return 0; -} diff --git a/libstdc++-v3/testsuite/23_containers/map/debug/self_move_assign_neg.cc b/libstdc++-v3/testsuite/23_containers/map/debug/self_move_assign_neg.cc deleted file mode 100644 index aa80302d6fd..00000000000 --- a/libstdc++-v3/testsuite/23_containers/map/debug/self_move_assign_neg.cc +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (C) 2012-2020 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING3. If not see -// . -// -// { dg-do run { target c++11 xfail *-*-* } } -// { dg-require-debug-mode "" } - -#include - -void test01() -{ - std::map m1; - m1 = std::move(m1); -} - -int main() -{ - test01(); - return 0; -} diff --git a/libstdc++-v3/testsuite/23_containers/multimap/debug/iterator_self_move_assign_neg.cc b/libstdc++-v3/testsuite/23_containers/multimap/debug/iterator_self_move_assign_neg.cc deleted file mode 100644 index afaae19da77..00000000000 --- a/libstdc++-v3/testsuite/23_containers/multimap/debug/iterator_self_move_assign_neg.cc +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (C) 2012-2020 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING3. If not see -// . -// -// { dg-do run { target c++11 xfail *-*-* } } -// { dg-require-debug-mode "" } - -#include - -void test01() -{ - std::multimap mm1; - auto it1 = mm1.begin(); - it1 = std::move(it1); -} - -int main() -{ - test01(); - return 0; -} diff --git a/libstdc++-v3/testsuite/23_containers/multimap/debug/self_move_assign_neg.cc b/libstdc++-v3/testsuite/23_containers/multimap/debug/self_move_assign_neg.cc deleted file mode 100644 index cde72a34677..00000000000 --- a/libstdc++-v3/testsuite/23_containers/multimap/debug/self_move_assign_neg.cc +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (C) 2012-2020 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING3. If not see -// . -// -// { dg-do run { target c++11 xfail *-*-* } } -// { dg-require-debug-mode "" } - -#include - -void test01() -{ - std::multimap mm1; - mm1 = std::move(mm1); -} - -int main() -{ - test01(); - return 0; -} diff --git a/libstdc++-v3/testsuite/23_containers/multiset/debug/iterator_self_move_assign_neg.cc b/libstdc++-v3/testsuite/23_containers/multiset/debug/iterator_self_move_assign_neg.cc deleted file mode 100644 index 806808ed687..00000000000 --- a/libstdc++-v3/testsuite/23_containers/multiset/debug/iterator_self_move_assign_neg.cc +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (C) 2012-2020 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING3. If not see -// . -// -// { dg-do run { target c++11 xfail *-*-* } } -// { dg-require-debug-mode "" } - -#include - -void test01() -{ - std::multiset ms1; - auto it1 = ms1.begin(); - it1 = std::move(it1); -} - -int main() -{ - test01(); - return 0; -} diff --git a/libstdc++-v3/testsuite/23_containers/multiset/debug/self_move_assign_neg.cc b/libstdc++-v3/testsuite/23_containers/multiset/debug/self_move_assign_neg.cc deleted file mode 100644 index e4ea9b8ad2e..00000000000 --- a/libstdc++-v3/testsuite/23_containers/multiset/debug/self_move_assign_neg.cc +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (C) 2012-2020 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING3. If not see -// . -// -// { dg-do run { target c++11 xfail *-*-* } } -// { dg-require-debug-mode "" } - -#include - -void test01() -{ - std::multiset ms1; - ms1 = std::move(ms1); -} - -int main() -{ - test01(); - return 0; -} diff --git a/libstdc++-v3/testsuite/23_containers/set/debug/iterator_self_move_assign_neg.cc b/libstdc++-v3/testsuite/23_containers/set/debug/iterator_self_move_assign_neg.cc deleted file mode 100644 index 9672cc6a860..00000000000 --- a/libstdc++-v3/testsuite/23_containers/set/debug/iterator_self_move_assign_neg.cc +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (C) 2012-2020 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING3. If not see -// . -// -// { dg-do run { target c++11 xfail *-*-* } } -// { dg-require-debug-mode "" } - -#include - -void test01() -{ - std::set s1; - auto it1 = s1.begin(); - it1 = std::move(it1); -} - -int main() -{ - test01(); - return 0; -} diff --git a/libstdc++-v3/testsuite/23_containers/set/debug/self_move_assign_neg.cc b/libstdc++-v3/testsuite/23_containers/set/debug/self_move_assign_neg.cc deleted file mode 100644 index ab44ac1a36c..00000000000 --- a/libstdc++-v3/testsuite/23_containers/set/debug/self_move_assign_neg.cc +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (C) 2012-2020 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING3. If not see -// . -// -// { dg-do run { target c++11 xfail *-*-* } } -// { dg-require-debug-mode "" } - -#include - -void test01() -{ - std::set s1; - s1 = std::move(s1); -} - -int main() -{ - test01(); - return 0; -} diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/debug/iterator_self_move_assign_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/debug/iterator_self_move_assign_neg.cc deleted file mode 100644 index 10dafde93e9..00000000000 --- a/libstdc++-v3/testsuite/23_containers/unordered_map/debug/iterator_self_move_assign_neg.cc +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (C) 2012-2020 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING3. If not see -// . -// -// { dg-do run { target c++11 xfail *-*-* } } -// { dg-require-debug-mode "" } - -#include - -void test01() -{ - std::unordered_map um1; - auto it1 = um1.begin(); - it1 = std::move(it1); -} - -int main() -{ - test01(); - return 0; -} diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/debug/self_move_assign_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/debug/self_move_assign_neg.cc deleted file mode 100644 index a93bedfe582..00000000000 --- a/libstdc++-v3/testsuite/23_containers/unordered_map/debug/self_move_assign_neg.cc +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (C) 2012-2020 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING3. If not see -// . -// -// { dg-do run { target c++11 xfail *-*-* } } -// { dg-require-debug-mode "" } - -#include - -void test01() -{ - std::unordered_map um1; - um1 = std::move(um1); -} - -int main() -{ - test01(); - return 0; -} diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/iterator_self_move_assign_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/iterator_self_move_assign_neg.cc deleted file mode 100644 index 91f9205ed61..00000000000 --- a/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/iterator_self_move_assign_neg.cc +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (C) 2012-2020 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING3. If not see -// . -// -// { dg-do run { target c++11 xfail *-*-* } } -// { dg-require-debug-mode "" } - -#include - -void test01() -{ - std::unordered_multimap umm1; - auto it1 = umm1.begin(); - it1 = std::move(it1); -} - -int main() -{ - test01(); - return 0; -} diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/self_move_assign_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/self_move_assign_neg.cc deleted file mode 100644 index 1948eaa76c3..00000000000 --- a/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/self_move_assign_neg.cc +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (C) 2012-2020 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING3. If not see -// . -// -// { dg-do run { target c++11 xfail *-*-* } } -// { dg-require-debug-mode "" } - -#include - -void test01() -{ - std::unordered_multimap umm1; - umm1 = std::move(umm1); -} - -int main() -{ - test01(); - return 0; -} diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/iterator_self_move_assign_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/iterator_self_move_assign_neg.cc deleted file mode 100644 index 2b0d4126eb3..00000000000 --- a/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/iterator_self_move_assign_neg.cc +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (C) 2012-2020 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING3. If not see -// . -// -// { dg-do run { target c++11 xfail *-*-* } } -// { dg-require-debug-mode "" } - -#include - -void test01() -{ - std::unordered_multiset ums1; - auto it1 = ums1.begin(); - it1 = std::move(it1); -} - -int main() -{ - test01(); - return 0; -} diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/self_move_assign_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/self_move_assign_neg.cc deleted file mode 100644 index d7e0e0bb899..00000000000 --- a/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/self_move_assign_neg.cc +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (C) 2012-2020 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING3. If not see -// . -// -// { dg-do run { target c++11 xfail *-*-* } } -// { dg-require-debug-mode "" } - -#include - -void test01() -{ - std::unordered_multiset ums1; - ums1 = std::move(ums1); -} - -int main() -{ - test01(); - return 0; -} diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/debug/iterator_self_move_assign_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/debug/iterator_self_move_assign_neg.cc deleted file mode 100644 index aa105c4a000..00000000000 --- a/libstdc++-v3/testsuite/23_containers/unordered_set/debug/iterator_self_move_assign_neg.cc +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (C) 2012-2020 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING3. If not see -// . -// -// { dg-do run { target c++11 xfail *-*-* } } -// { dg-require-debug-mode "" } - -#include - -void test01() -{ - std::unordered_set us1; - auto it1 = us1.begin(); - it1 = std::move(it1); -} - -int main() -{ - test01(); - return 0; -} diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/debug/self_move_assign_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/debug/self_move_assign_neg.cc deleted file mode 100644 index 538eba62bf2..00000000000 --- a/libstdc++-v3/testsuite/23_containers/unordered_set/debug/self_move_assign_neg.cc +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (C) 2012-2020 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING3. If not see -// . -// -// { dg-do run { target c++11 xfail *-*-* } } -// { dg-require-debug-mode "" } - -#include - -void test01() -{ - std::unordered_set us1; - us1 = std::move(us1); -} - -int main() -{ - test01(); - return 0; -} diff --git a/libstdc++-v3/testsuite/23_containers/vector/debug/iterator_self_move_assign_neg.cc b/libstdc++-v3/testsuite/23_containers/vector/debug/iterator_self_move_assign_neg.cc deleted file mode 100644 index f1d84781c6e..00000000000 --- a/libstdc++-v3/testsuite/23_containers/vector/debug/iterator_self_move_assign_neg.cc +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (C) 2012-2020 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING3. If not see -// . -// -// { dg-do run { target c++11 xfail *-*-* } } -// { dg-require-debug-mode "" } - -#include - -void test01() -{ - std::vector v1; - auto it1 = v1.begin(); - it1 = std::move(it1); -} - -int main() -{ - test01(); - return 0; -} diff --git a/libstdc++-v3/testsuite/23_containers/vector/debug/self_move_assign_neg.cc b/libstdc++-v3/testsuite/23_containers/vector/debug/self_move_assign_neg.cc deleted file mode 100644 index b19bfddaf66..00000000000 --- a/libstdc++-v3/testsuite/23_containers/vector/debug/self_move_assign_neg.cc +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (C) 2012-2020 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING3. If not see -// . -// -// { dg-do run { target c++11 xfail *-*-* } } -// { dg-require-debug-mode "" } - -#include - -void test01() -{ - std::vector v1; - v1 = std::move(v1); -} - -int main() -{ - test01(); - return 0; -} --4vgOdmpzXGVCiUly--