From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2181) id 8FCE53858431; Tue, 24 Aug 2021 16:01:23 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 8FCE53858431 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset="utf-8" From: Jonathan Wakely To: gcc-cvs@gcc.gnu.org, libstdc++-cvs@gcc.gnu.org Subject: [gcc r11-8920] libstdc++: Restore __gnu_debug::array [PR100682] X-Act-Checkin: gcc X-Git-Author: Jonathan Wakely X-Git-Refname: refs/heads/releases/gcc-11 X-Git-Oldrev: 0e19dc858234a872e1e719fa05d4c7ccf6a2c483 X-Git-Newrev: 743df0fa0df5af32fce70fcdc6ae6b7dc0f01d9b Message-Id: <20210824160123.8FCE53858431@sourceware.org> Date: Tue, 24 Aug 2021 16:01:23 +0000 (GMT) X-BeenThere: libstdc++-cvs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libstdc++-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 24 Aug 2021 16:01:23 -0000 https://gcc.gnu.org/g:743df0fa0df5af32fce70fcdc6ae6b7dc0f01d9b commit r11-8920-g743df0fa0df5af32fce70fcdc6ae6b7dc0f01d9b Author: Jonathan Wakely Date: Thu Jul 22 11:45:32 2021 +0100 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. (cherry picked from commit 254e5d19a177af23a77b67fd51d0d1a25eaabfc7) Diff: --- .../doc/html/manual/debug_mode_semantics.html | 4 +- libstdc++-v3/doc/html/manual/debug_mode_using.html | 15 +++++++- libstdc++-v3/doc/xml/manual/debug_mode.xml | 25 ++++++++---- libstdc++-v3/include/debug/array | 45 ++++++++++++++++++++++ 4 files changed, 77 insertions(+), 12 deletions(-) diff --git a/libstdc++-v3/doc/html/manual/debug_mode_semantics.html b/libstdc++-v3/doc/html/manual/debug_mode_semantics.html index fb84276be88..35d8aa3ac4b 100644 --- a/libstdc++-v3/doc/html/manual/debug_mode_semantics.html +++ b/libstdc++-v3/doc/html/manual/debug_mode_semantics.html @@ -35,10 +35,10 @@ (N.B. In GCC 3.4.x and 4.0.0, due to a bug, -D_GLIBXX_DEBUG_PEDANTIC was also needed. The problem has been fixed in GCC 4.0.1 and later versions.)

The following library components provide extra debugging - capabilities in debug mode:

  • std::basic_string (no safe iterators and see note below)

  • std::bitset

  • std::deque

  • std::list

  • std::map

  • std::multimap

  • std::multiset

  • std::set

  • std::vector

  • std::unordered_map

  • std::unordered_multimap

  • std::unordered_set

  • std::unordered_multiset

N.B. although there are precondition checks for some string operations, + capabilities in debug mode:

  • std::array (no safe iterators)

  • std::basic_string (no safe iterators and see note below)

  • std::bitset

  • std::deque

  • std::list

  • std::map

  • std::multimap

  • std::multiset

  • std::set

  • std::vector

  • std::unordered_map

  • std::unordered_multimap

  • std::unordered_set

  • std::unordered_multiset

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 diff --git a/libstdc++-v3/doc/html/manual/debug_mode_using.html b/libstdc++-v3/doc/html/manual/debug_mode_using.html index e4f7ea54d22..4deb4980161 100644 --- a/libstdc++-v3/doc/html/manual/debug_mode_using.html +++ b/libstdc++-v3/doc/html/manual/debug_mode_using.html @@ -18,6 +18,17 @@ mode or with debug mode. The following table provides the names and headers of the debugging containers: -

Table 17.1. Debugging Containers

ContainerHeaderDebug containerDebug header
std::bitsetbitset__gnu_debug::bitset<debug/bitset>
std::dequedeque__gnu_debug::deque<debug/deque>
std::listlist__gnu_debug::list<debug/list>
std::mapmap__gnu_debug::map<debug/map>
std::multimapmap__gnu_debug::multimap<debug/map>
std::multisetset__gnu_debug::multiset<debug/set>
std::setset__gnu_debug::set<debug/set>
std::stringstring__gnu_debug::string<debug/string>
std::wstringstring__gnu_debug::wstring<debug/string>
std::basic_stringstring__gnu_debug::basic_string<debug/string>
std::vectorvector__gnu_debug::vector<debug/vector>

In addition, when compiling in C++11 mode, these additional +

Table 17.1. Debugging Containers

ContainerHeaderDebug containerDebug header
std::bitsetbitset__gnu_debug::bitset<debug/bitset>
std::dequedeque__gnu_debug::deque<debug/deque>
std::listlist__gnu_debug::list<debug/list>
std::mapmap__gnu_debug::map<debug/map>
std::multimapmap__gnu_debug::multimap<debug/map>
std::multisetset__gnu_debug::multiset<debug/set>
std::setset__gnu_debug::set<debug/set>
std::stringstring__gnu_debug::string<debug/string>
std::wstringstring__gnu_debug::wstring<debug/string>
std::basic_stringstring__gnu_debug::basic_string<debug/string>
std::vectorvector__gnu_debug::vector<debug/vector>

When compiling in C++11 mode (or newer), these containers have additional debug capability. -

Table 17.2. Debugging Containers C++11

ContainerHeaderDebug containerDebug header
std::arrayarray__gnu_debug::array<debug/array>
std::forward_listforward_list__gnu_debug::forward_list<debug/forward_list>
std::unordered_mapunordered_map__gnu_debug::unordered_map<debug/unordered_map>
std::unordered_multimapunordered_map__gnu_debug::unordered_multimap<debug/unordered_map>
std::unordered_setunordered_set__gnu_debug::unordered_set<debug/unordered_set>
std::unordered_multisetunordered_set__gnu_debug::unordered_multiset<debug/unordered_set>

\ No newline at end of file +

Table 17.2. Debugging Containers C++11

ContainerHeaderDebug containerDebug header
std::forward_listforward_list__gnu_debug::forward_list<debug/forward_list>
std::unordered_mapunordered_map__gnu_debug::unordered_map<debug/unordered_map>
std::unordered_multimapunordered_map__gnu_debug::unordered_multimap<debug/unordered_map>
std::unordered_setunordered_set__gnu_debug::unordered_set<debug/unordered_set>
std::unordered_multisetunordered_set__gnu_debug::unordered_multiset<debug/unordered_set>

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. +

\ No newline at end of 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