https://gcc.gnu.org/g:bfc2b87f8244a13ab00e8e3fe2af1d6d18fcaa36

commit r16-7844-gbfc2b87f8244a13ab00e8e3fe2af1d6d18fcaa36
Author: Tomasz Kamiński <[email protected]>
Date:   Fri Feb 27 20:14:44 2026 +0100

    libstdc++: Add #pragma to slience null-dereference warning in 
istreambuf_iterator::operator++ [PR105580]
    
    The warning was produced by following sequence, given an 
istream_iterator<char>
    it, such that *it will result in hitting EoF in it->_M_get(), and thus 
clearing
    _M_sbuf, the subsequent call to ++it, will result in _M_sbuf->sbumpc() call 
on
    null pointer. This is however an false-positive, as in such situation
    it == istream_iteator() returns true, and the iterator should not be
    incremented in first place.
    
    This patch sliences the issue, by disabling the "-Wnull-dereference" using
    GCC diagnostic pragmas. To work correctly the pragmas needs to be placed 
around
    streambuf functions on which the issue originating from istreambuf_iterator 
are
    reported.
    
            PR libstdc++/105580
    
    libstdc++-v3/ChangeLog:
    
            * include/std/streambuf (streambuf::gptr, streambuf::egptr)
            (streambuf::gbump): Surround with pragma disabling 
-Wnull-dereference.
            * testsuite/24_iterators/istreambuf_iterator/105580.cc: Remove 
check for
            warning being emitted.
    
    Reviewed-by: Jonathan Wakely <[email protected]>
    Signed-off-by: Tomasz Kamiński <[email protected]>

Diff:
---
 libstdc++-v3/include/std/streambuf                                | 5 +++++
 libstdc++-v3/testsuite/24_iterators/istreambuf_iterator/105580.cc | 2 --
 2 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/libstdc++-v3/include/std/streambuf 
b/libstdc++-v3/include/std/streambuf
index d6036bd5ddc4..f013aa06c28b 100644
--- a/libstdc++-v3/include/std/streambuf
+++ b/libstdc++-v3/include/std/streambuf
@@ -490,6 +490,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       char_type*
       eback() const { return _M_in_beg; }
 
+// Required to silence false-positive warnings originating from 
istream_iterator::operator++,
+// see PR105580.
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wnull-dereference"
       char_type*
       gptr()  const { return _M_in_cur;  }
 
@@ -505,6 +509,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       */
       void
       gbump(int __n) { _M_in_cur += __n; }
+#pragma GCC diagnostic pop
 
       /**
        *  @brief  Setting the three read area pointers.
diff --git a/libstdc++-v3/testsuite/24_iterators/istreambuf_iterator/105580.cc 
b/libstdc++-v3/testsuite/24_iterators/istreambuf_iterator/105580.cc
index 85f888b86e72..87edf999ffcd 100644
--- a/libstdc++-v3/testsuite/24_iterators/istreambuf_iterator/105580.cc
+++ b/libstdc++-v3/testsuite/24_iterators/istreambuf_iterator/105580.cc
@@ -1,5 +1,4 @@
 // { dg-compile }
-// { dg-require-normal-mode "" }
 // { dg-additional-options "-Wnull-dereference" }
 
 #include <string>
@@ -12,5 +11,4 @@ int main()
   std::string ss(it, end);
   return 0;
 }
-// { dg-warning ".*null pointer dereference" "" { target *-*-* } 0 }

Reply via email to