[libcxx-commits] [PATCH] D158749: [WIP][libc++] Implement LWG3464(istream::gcount() can overflow)
Yurong via Phabricator via libcxx-commits
libcxx-commits at lists.llvm.org
Fri Aug 25 20:25:51 PDT 2023
yronglin updated this revision to Diff 553696.
yronglin added a comment.
Addres comments.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D158749/new/
https://reviews.llvm.org/D158749
Files:
libcxx/docs/Status/Cxx23Issues.csv
libcxx/include/istream
Index: libcxx/include/istream
===================================================================
--- libcxx/include/istream
+++ 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<streamsize>::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;
}
Index: libcxx/docs/Status/Cxx23Issues.csv
===================================================================
--- libcxx/docs/Status/Cxx23Issues.csv
+++ libcxx/docs/Status/Cxx23Issues.csv
@@ -10,7 +10,7 @@
"`3432 <https://wg21.link/LWG3432>`__","Missing requirement for ``comparison_category``","November 2020","|Complete|","16.0","|spaceship|"
"`3447 <https://wg21.link/LWG3447>`__","Deduction guides for ``take_view`` and ``drop_view`` have different constraints","November 2020","|Complete|","14.0","|ranges|"
"`3450 <https://wg21.link/LWG3450>`__","The const overloads of ``take_while_view::begin/end`` are underconstrained","November 2020","|Complete|","16.0","|ranges|"
-"`3464 <https://wg21.link/LWG3464>`__","``istream::gcount()`` can overflow","November 2020","",""
+"`3464 <https://wg21.link/LWG3464>`__","``istream::gcount()`` can overflow","November 2020","|Complete|","18.0"
"`2731 <https://wg21.link/LWG2731>`__","Existence of ``lock_guard<MutexTypes...>::mutex_type`` typedef unclear","November 2020","|Complete|","5.0"
"`2743 <https://wg21.link/LWG2743>`__","P0083R3 ``node_handle`` private members missing ""exposition only"" comment","November 2020","|Nothing To Do|",""
"`2820 <https://wg21.link/LWG2820>`__","Clarify ``<cstdint>`` macros","November 2020","|Nothing To Do|",""
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D158749.553696.patch
Type: text/x-patch
Size: 3912 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/libcxx-commits/attachments/20230826/ebee29be/attachment.bin>
More information about the libcxx-commits
mailing list