From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by sourceware.org (Postfix) with ESMTP id A88DB3839414 for ; Thu, 22 Jul 2021 13:33:19 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org A88DB3839414 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-547-bwvwfL4mMXWd3Lhsxcuvqw-1; Thu, 22 Jul 2021 09:33:15 -0400 X-MC-Unique: bwvwfL4mMXWd3Lhsxcuvqw-1 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 389D1100E32D; Thu, 22 Jul 2021 13:33:14 +0000 (UTC) Received: from localhost (unknown [10.33.36.7]) by smtp.corp.redhat.com (Postfix) with ESMTP id D3F0619711; Thu, 22 Jul 2021 13:33:13 +0000 (UTC) Date: Thu, 22 Jul 2021 14:33:12 +0100 From: Jonathan Wakely To: libstdc++@gcc.gnu.org, gcc-patches@gcc.gnu.org Subject: [committed] libstdc++: Restore __gnu_debug::array [PR100682] Message-ID: MIME-Version: 1.0 X-Clacks-Overhead: GNU Terry Pratchett X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: multipart/mixed; boundary="kwZeYnyPuCuhy3SY" Content-Disposition: inline X-Spam-Status: No, score=-14.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_LOW, RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=unavailable autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: libstdc++@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libstdc++ mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 22 Jul 2021 13:33:21 -0000 --kwZeYnyPuCuhy3SY Content-Type: text/plain; charset=us-ascii Content-Disposition: inline As the PR points out, we removed the debug version of std::array without any period of deprecation. Although std::array contains all the actual debug checks now, removing the header breaks any code that was using that explicitly. The manual still lists doing that as supported. This restores the header, but simply defines __gnu_debug::array as an alias for std::array, and declares the alias with the deprecated attribute. The docs are updated to match. Signed-off-by: Jonathan Wakely libstdc++-v3/ChangeLog: PR libstdc++/100682 * doc/xml/manual/debug_mode.xml: Update documentation about debug capability of std::array. * doc/html/*: Regenerate. * include/debug/array: New file. Tested powerpc64le-linux. Committed to trunk. This should be backported to gcc-11 branch too, but I'll do it after the 11.2 release. --kwZeYnyPuCuhy3SY Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="patch.txt" commit 254e5d19a177af23a77b67fd51d0d1a25eaabfc7 Author: Jonathan Wakely Date: Thu Jul 22 11:45:32 2021 libstdc++: Restore __gnu_debug::array [PR100682] As the PR points out, we removed the debug version of std::array without any period of deprecation. Although std::array contains all the actual debug checks now, removing the header breaks any code that was using that explicitly. The manual still lists doing that as supported. This restores the header, but simply defines __gnu_debug::array as an alias for std::array, and declares the alias with the deprecated attribute. The docs are updated to match. Signed-off-by: Jonathan Wakely libstdc++-v3/ChangeLog: PR libstdc++/100682 * doc/xml/manual/debug_mode.xml: Update documentation about debug capability of std::array. * doc/html/*: Regenerate. * include/debug/array: New file. diff --git a/libstdc++-v3/doc/xml/manual/debug_mode.xml b/libstdc++-v3/doc/xml/manual/debug_mode.xml index 883e8cb4f03..dbd5c2b7775 100644 --- a/libstdc++-v3/doc/xml/manual/debug_mode.xml +++ b/libstdc++-v3/doc/xml/manual/debug_mode.xml @@ -104,6 +104,7 @@ The following library components provide extra debugging capabilities in debug mode: + std::array (no safe iterators) std::basic_string (no safe iterators and see note below) std::bitset std::deque @@ -122,7 +123,7 @@ N.B. although there are precondition checks for some string operations, e.g. operator[], they will not always be run when using the char and -wchar_t specialisations (std::string and +wchar_t specializations (std::string and std::wstring). This is because libstdc++ uses GCC's extern template extension to provide explicit instantiations of std::string and std::wstring, and those @@ -263,7 +264,7 @@ which always works correctly. -In addition, when compiling in C++11 mode, these additional +When compiling in C++11 mode (or newer), these containers have additional debug capability. @@ -285,12 +286,6 @@ containers have additional debug capability. - - std::array - array - __gnu_debug::array - <debug/array> - std::forward_list forward_list @@ -324,6 +319,20 @@ containers have additional debug capability. + +Prior to GCC 11 a debug version of std::array +was available as __gnu_debug::array in the +header <debug/array>. +Because array::iterator is just a pointer, +the debug array can't check iterator operations, +it can only check direct accesses to the container. +Starting with GCC 11 all the debug capabilities are available in +std::array, without needing a separate type, +so __gnu_debug::array is just an alias for +std::array. +That alias is deprecated and may be removed in a future release. + + diff --git a/libstdc++-v3/include/debug/array b/libstdc++-v3/include/debug/array new file mode 100644 index 00000000000..5cb51dfe8b5 --- /dev/null +++ b/libstdc++-v3/include/debug/array @@ -0,0 +1,45 @@ +// Redeclaration of std::array in debug namespace -*- C++ -*- + +// Copyright (C) 2021 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. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file debug/array + * This file is a GNU debug extension to the Standard C++ Library. + */ + +#ifndef _GLIBCXX_DEBUG_ARRAY +#define _GLIBCXX_DEBUG_ARRAY 1 + +#pragma GCC system_header + +#include + +namespace __gnu_debug +{ + template + using array _GLIBCXX_DEPRECATED_SUGGEST("std::array") + = std::array<_Tp, _Nm>; + + using std::get; + using std::swap; +} +#endif // _GLIBCXX_DEBUG_ARRAY --kwZeYnyPuCuhy3SY--