public inbox for libstdc++-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r9-8815] libstdc++: Add deprecated attributes to old iostream members
@ 2020-08-19 12:42 Jonathan Wakely
  0 siblings, 0 replies; only message in thread
From: Jonathan Wakely @ 2020-08-19 12:42 UTC (permalink / raw)
  To: gcc-cvs, libstdc++-cvs

https://gcc.gnu.org/g:495bdda5305b366e6f15134431d9d18b952884fc

commit r9-8815-g495bdda5305b366e6f15134431d9d18b952884fc
Author: Jonathan Wakely <jwakely@redhat.com>
Date:   Wed Aug 19 12:13:03 2020 +0100

    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.
            * 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:
---
 libstdc++-v3/include/bits/c++config     |  4 ++++
 libstdc++-v3/include/bits/ios_base.h    | 17 +++++++++++------
 libstdc++-v3/include/std/streambuf      |  4 +---
 libstdc++-v3/testsuite/27_io/types/1.cc | 13 +++++++++++--
 4 files changed, 27 insertions(+), 11 deletions(-)

diff --git a/libstdc++-v3/include/bits/c++config b/libstdc++-v3/include/bits/c++config
index 7e0962edd19..d2c2efe1c06 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
 #ifndef _GLIBCXX_USE_DEPRECATED
 # define _GLIBCXX_USE_DEPRECATED 1
@@ -84,8 +85,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 be908b3ffd2..bc96ff6ddc8 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 std::streampos streampos;
-    typedef std::streamoff streamoff;
+    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
+      _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 d9ca981d704..f812e32de42 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/testsuite/27_io/types/1.cc b/libstdc++-v3/testsuite/27_io/types/1.cc
index 640ff737330..19a42360b11 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
 // <http://www.gnu.org/licenses/>.
 
+// { 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" }
 }


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2020-08-19 12:42 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-08-19 12:42 [gcc r9-8815] libstdc++: Add deprecated attributes to old iostream members Jonathan Wakely

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).