From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-1.mimecast.com (us-smtp-2.mimecast.com [205.139.110.61]) by sourceware.org (Postfix) with ESMTP id 413E13857C54 for ; Wed, 19 Aug 2020 12:47:24 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 413E13857C54 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-98-B1V8zaEjOS6SeGQIxnorSw-1; Wed, 19 Aug 2020 08:47:21 -0400 X-MC-Unique: B1V8zaEjOS6SeGQIxnorSw-1 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 8365B81F028; Wed, 19 Aug 2020 12:47:20 +0000 (UTC) Received: from localhost (unknown [10.33.36.183]) by smtp.corp.redhat.com (Postfix) with ESMTP id 212E1600DD; Wed, 19 Aug 2020 12:47:19 +0000 (UTC) Date: Wed, 19 Aug 2020 13:47:19 +0100 From: Jonathan Wakely To: libstdc++@gcc.gnu.org, gcc-patches@gcc.gnu.org Subject: Re: [committed] libstdc++: Add deprecated attributes to old iostream members Message-ID: <20200819124719.GJ3400@redhat.com> References: <20200819112933.GA4166481@redhat.com> MIME-Version: 1.0 In-Reply-To: <20200819112933.GA4166481@redhat.com> X-Clacks-Overhead: GNU Terry Pratchett X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Mimecast-Spam-Score: 0.002 X-Mimecast-Originator: redhat.com Content-Type: multipart/mixed; boundary="FJ0JV+AOCbvjFtNn" Content-Disposition: inline X-Spam-Status: No, score=-14.0 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=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) 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: Wed, 19 Aug 2020 12:47:26 -0000 --FJ0JV+AOCbvjFtNn Content-Type: text/plain; charset=us-ascii; format=flowed Content-Disposition: inline On 19/08/20 12:29 +0100, Jonathan Wakely wrote: >Back in 2017 I removed these prehistoric members (which were deprecated >since C++98) for C++17 mode. But I didn't add deprecated attributes to >most of them, so users didn't get any warning they would be going away. >Apparently some poor souls do actually use some of these names, and so >now that GCC 11 defaults to -std=gnu++17 some code has stopped >compiling. > >This adds deprecated attributes to them, so that C++98/03/11/14 code >will get a warning if it uses them. I'll also backport this to the >release branches so that users can find out about the deprecation before >they start using C++17. > >In order to give deprecated warnings even in C++98 mode this patch makes >_GLIBCXX_DEPRECATED work even for C++98, adds _GLIBCXX11_DEPRECATED for >the old meaning of _GLIBCXX_DEPRECATED, and adds new macros such as >_GLIBCXX_DEPRECATED_SUGGEST for suggesting alternatives to deprecated >features. > >libstdc++-v3/ChangeLog: > > * include/bits/c++config (_GLIBCXX_DEPRECATED): Define for all > standard modes. > (_GLIBCXX_DEPRECATED_SUGGEST): New macro for "use 'foo' instead" > message in deprecated warnings. > (_GLIBCXX11_DEPRECATED, _GLIBCXX11_DEPRECATED_SUGGEST): New > macros for marking features derpecated in C++11. I'll try to remember to fix the "derpecated" typo in the ChangeLog tomorrow. > (_GLIBCXX17_DEPRECATED_SUGGEST, _GLIBCXX20_DEPRECATED_SUGGEST): > New macros. > * include/backward/auto_ptr.h (auto_ptr_ref, auto_ptr): > Use _GLIBCXX11_DEPRECATED instead of _GLIBCXX_DEPRECATED. > (auto_ptr): Use _GLIBCXX11_DEPRECATED_SUGGEST. > * include/backward/binders.h (binder1st, binder2nd): Likewise. > * include/bits/ios_base.h (io_state, open_mode, seek_dir) > (streampos, streamoff): Use _GLIBCXX_DEPRECATED_SUGGEST. > * include/std/streambuf (stossc): Replace C++11 attribute > with _GLIBCXX_DEPRECATED_SUGGEST. > * include/std/type_traits (__is_nullptr_t): Use > _GLIBCXX_DEPRECATED_SUGGEST instead of _GLIBCXX_DEPRECATED. > * testsuite/27_io/types/1.cc: Check for deprecated warnings. > Also check for io_state, open_mode and seek_dir typedefs. > >Tested powerpc64le-linux. Committed to trunk. The attached patch is the backport I've pushed to the gcc-10 branch, which only adds the new _GLIBCXX_DEPRECATED_SUGGEST macro and doesn't enable it for C++98. The version for gcc-9 is the same but doesn't touch the __is_nullptr_t trait, because GCC 10.1.0 was the first release to deprecate that. --FJ0JV+AOCbvjFtNn Content-Type: text/x-patch; charset=us-ascii Content-Disposition: attachment; filename="patch.txt" commit 817ac30a8581f75cc25c4c71ef8623eb52953390 Author: Jonathan Wakely Date: Wed Aug 19 13:41:26 2020 libstdc++: Add deprecated attributes to old iostream members Back in 2017 I removed these prehistoric members (which were deprecated since C++98) for C++17 mode. But I didn't add deprecated attributes to most of them, so users didn't get any warning they would be going away. Apparently some poor souls do actually use some of these names, and so now that GCC 11 defaults to -std=gnu++17 some code has stopped compiling. This adds deprecated attributes to them, so that C++98/03/11/14 code will get a warning if it uses them. I'll also backport this to the release branches so that users can find out about the deprecation before they start using C++17. libstdc++-v3/ChangeLog: * include/bits/c++config (_GLIBCXX_DEPRECATED_SUGGEST): New macro for "use 'foo' instead" message in deprecated warnings. * include/bits/ios_base.h (io_state, open_mode, seek_dir) (streampos, streamoff): Use _GLIBCXX_DEPRECATED_SUGGEST. * include/std/streambuf (stossc): Replace C++11 attribute with _GLIBCXX_DEPRECATED_SUGGEST. * include/std/type_traits (__is_nullptr_t): Use _GLIBCXX_DEPRECATED_SUGGEST instead of _GLIBCXX_DEPRECATED. * testsuite/27_io/types/1.cc: Check for deprecated warnings. Also check for io_state, open_mode and seek_dir typedefs. (cherry picked from commit eef9bf4ca8d90a1751bc4bff03722ee68999eb8e) diff --git a/libstdc++-v3/include/bits/c++config b/libstdc++-v3/include/bits/c++config index b1fad59d4b3..aa94a681fff 100644 --- a/libstdc++-v3/include/bits/c++config +++ b/libstdc++-v3/include/bits/c++config @@ -77,6 +77,7 @@ // Macros for deprecated attributes. // _GLIBCXX_USE_DEPRECATED // _GLIBCXX_DEPRECATED +// _GLIBCXX_DEPRECATED_SUGGEST // _GLIBCXX17_DEPRECATED // _GLIBCXX20_DEPRECATED( string-literal ) #ifndef _GLIBCXX_USE_DEPRECATED @@ -85,8 +86,11 @@ #if defined(__DEPRECATED) && (__cplusplus >= 201103L) # define _GLIBCXX_DEPRECATED __attribute__ ((__deprecated__)) +# define _GLIBCXX_DEPRECATED_SUGGEST(ALT) \ + __attribute__ ((__deprecated__ ("use '" ALT "' instead"))) #else # define _GLIBCXX_DEPRECATED +# define _GLIBCXX_DEPRECATED_SUGGEST(ALT) #endif #if defined(__DEPRECATED) && (__cplusplus >= 201703L) diff --git a/libstdc++-v3/include/bits/ios_base.h b/libstdc++-v3/include/bits/ios_base.h index d6562544f4d..4ac026547b4 100644 --- a/libstdc++-v3/include/bits/ios_base.h +++ b/libstdc++-v3/include/bits/ios_base.h @@ -471,12 +471,17 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION #if __cplusplus <= 201402L // Annex D.6 (removed in C++17) - typedef int io_state; - typedef int open_mode; - typedef int seek_dir; + typedef int io_state + _GLIBCXX_DEPRECATED_SUGGEST("std::iostate"); + typedef int open_mode + _GLIBCXX_DEPRECATED_SUGGEST("std::openmode"); + typedef int seek_dir + _GLIBCXX_DEPRECATED_SUGGEST("std::seekdir"); - typedef std::streampos streampos; - typedef std::streamoff streamoff; + typedef std::streampos streampos + _GLIBCXX_DEPRECATED_SUGGEST("std::streampos"); + typedef std::streamoff streamoff + _GLIBCXX_DEPRECATED_SUGGEST("std::streamoff"); #endif // Callbacks; diff --git a/libstdc++-v3/include/std/streambuf b/libstdc++-v3/include/std/streambuf index f8e4cb9879c..7cb4fabbb89 100644 --- a/libstdc++-v3/include/std/streambuf +++ b/libstdc++-v3/include/std/streambuf @@ -786,9 +786,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * * See http://gcc.gnu.org/ml/libstdc++/2002-05/msg00168.html */ -#if __cplusplus >= 201103L - [[__deprecated__("stossc is deprecated, use sbumpc instead")]] -#endif + _GLIBCXX_DEPRECATED_SUGGEST("std::basic_streambuf::sbumpc") void stossc() { diff --git a/libstdc++-v3/include/std/type_traits b/libstdc++-v3/include/std/type_traits index bc9a45b3746..c62dc72d3d7 100644 --- a/libstdc++-v3/include/std/type_traits +++ b/libstdc++-v3/include/std/type_traits @@ -518,7 +518,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template struct __is_nullptr_t : public is_null_pointer<_Tp> - { } _GLIBCXX_DEPRECATED; + { } _GLIBCXX_DEPRECATED_SUGGEST("std::is_null_pointer"); // Composite type categories. diff --git a/libstdc++-v3/testsuite/27_io/types/1.cc b/libstdc++-v3/testsuite/27_io/types/1.cc index 40255ec51d1..a565c205b35 100644 --- a/libstdc++-v3/testsuite/27_io/types/1.cc +++ b/libstdc++-v3/testsuite/27_io/types/1.cc @@ -15,6 +15,7 @@ // with this library; see the file COPYING3. If not see // . +// { dg-options "-Wdeprecated" } // { dg-do compile { target c++14_down } } // 27.4.2.1 - Types [lib.ios.types] @@ -26,6 +27,14 @@ // Annex D, deprecated. void test01() { - typedef std::ios_base::streampos streampos_type; - typedef std::ios_base::streamoff streamoff_type; + typedef std::ios_base::streampos streampos_type; // { dg-warning "is deprecated: use 'std::streampos' instead" } + typedef std::ios_base::streamoff streamoff_type; // { dg-warning "is deprecated: use 'std::streamoff' instead" } +} + +// Annex D, deprecated. +void test02() +{ + typedef std::ios_base::io_state iostate_type; // { dg-warning "is deprecated: use 'std::iostate' instead" } + typedef std::ios_base::open_mode openmode_type; // { dg-warning "is deprecated: use 'std::openmode' instead" } + typedef std::ios_base::seek_dir seekdir_type; // { dg-warning "is deprecated: use 'std::seekdir' instead" } } --FJ0JV+AOCbvjFtNn--