diff --git a/libcxx/docs/Status/Cxx23Issues.csv b/libcxx/docs/Status/Cxx23Issues.csv --- a/libcxx/docs/Status/Cxx23Issues.csv +++ b/libcxx/docs/Status/Cxx23Issues.csv @@ -10,7 +10,7 @@ "`3432 `__","Missing requirement for ``comparison_category``","November 2020","|Complete|","16.0","|spaceship|" "`3447 `__","Deduction guides for ``take_view`` and ``drop_view`` have different constraints","November 2020","|Complete|","14.0","|ranges|" "`3450 `__","The const overloads of ``take_while_view::begin/end`` are underconstrained","November 2020","|Complete|","16.0","|ranges|" -"`3464 `__","``istream::gcount()`` can overflow","November 2020","","" +"`3464 `__","``istream::gcount()`` can overflow","November 2020","|Complete|","18.0" "`2731 `__","Existence of ``lock_guard::mutex_type`` typedef unclear","November 2020","|Complete|","5.0" "`2743 `__","P0083R3 ``node_handle`` private members missing ""exposition only"" comment","November 2020","|Nothing To Do|","" "`2820 `__","Clarify ```` macros","November 2020","|Nothing To Do|","" diff --git a/libcxx/include/istream b/libcxx/include/istream --- a/libcxx/include/istream +++ b/libcxx/include/istream @@ -214,6 +214,13 @@ basic_istream (const basic_istream& __rhs) = delete; basic_istream& operator=(const basic_istream& __rhs) = delete; + +private: + inline _LIBCPP_INLINE_VISIBILITY + void __inc_gcount() { + if (__gc_ < numeric_limits::max()) + ++__gc_; + } public: // 27.7.1.1.3 Prefix/suffix: @@ -714,7 +721,7 @@ __sb->sputc(traits_type::to_char_type(__i)), traits_type::eof())) break; - ++__gc_; + __inc_gcount(); this->rdbuf()->sbumpc(); } if (__gc_ == 0) @@ -806,7 +813,7 @@ if (traits_type::eq(__ch, __dlm)) break; *__s++ = __ch; - ++__gc_; + __inc_gcount(); this->rdbuf()->sbumpc(); } if (__gc_ == 0) @@ -867,7 +874,7 @@ break; if (traits_type::eq_int_type(__sb.sputc(__ch), traits_type::eof())) break; - ++__gc_; + __inc_gcount(); this->rdbuf()->sbumpc(); } #ifndef _LIBCPP_HAS_NO_EXCEPTIONS @@ -910,7 +917,7 @@ if (traits_type::eq(__ch, __dlm)) { this->rdbuf()->sbumpc(); - ++__gc_; + __inc_gcount(); break; } if (__gc_ >= __n-1) @@ -920,7 +927,7 @@ } *__s++ = __ch; this->rdbuf()->sbumpc(); - ++__gc_; + __inc_gcount(); } #ifndef _LIBCPP_HAS_NO_EXCEPTIONS } @@ -970,7 +977,7 @@ __state |= ios_base::eofbit; break; } - ++__gc_; + __inc_gcount(); if (traits_type::eq_int_type(__i, __dlm)) break; } @@ -985,7 +992,7 @@ __state |= ios_base::eofbit; break; } - ++__gc_; + __inc_gcount(); if (traits_type::eq_int_type(__i, __dlm)) break; }