45 lines
1.4 KiB
Diff
45 lines
1.4 KiB
Diff
libstdc++: Remove bogus assertion in std::from_chars [PR105324]
|
|
|
|
I'm not sure what I was thinking when I added this assertion, maybe it
|
|
was supposed to be alignment == 1 (which is what the pmr::string actually
|
|
uses). The simplest fix is to just remove the assertion.
|
|
|
|
The assertion is no longer enabled by default on trunk, but it's still
|
|
there for the --enablke-libstdcxx-debug build, and is still wrong. The
|
|
fix is needed on the gcc-11 branch.
|
|
|
|
2022-04-21 Jonathan Wakely <jwakely@redhat.com>
|
|
|
|
PR libstdc++/105324
|
|
* src/c++17/floating_from_chars.cc (buffer_resource::do_allocate):
|
|
Remove assertion.
|
|
* testsuite/20_util/from_chars/pr105324.cc: New test.
|
|
|
|
--- libstdc++-v3/src/c++17/floating_from_chars.cc
|
|
+++ libstdc++-v3/src/c++17/floating_from_chars.cc
|
|
@@ -101,7 +101,6 @@ namespace
|
|
return m_buf + std::__exchange(m_bytes, m_bytes + bytes);
|
|
|
|
__glibcxx_assert(m_ptr == nullptr);
|
|
- __glibcxx_assert(alignment != 1);
|
|
|
|
m_ptr = operator new(bytes);
|
|
m_bytes = bytes;
|
|
--- libstdc++-v3/testsuite/20_util/from_chars/pr105324.cc
|
|
+++ libstdc++-v3/testsuite/20_util/from_chars/pr105324.cc
|
|
@@ -0,0 +1,14 @@
|
|
+// { dg-do run { target c++17 } }
|
|
+
|
|
+#include <charconv>
|
|
+#include <string>
|
|
+
|
|
+int main()
|
|
+{
|
|
+ // PR libstdc++/105324
|
|
+ // std::from_chars() assertion at floating_from_chars.cc:78
|
|
+ std::string s(512, '1');
|
|
+ s[1] = '.';
|
|
+ long double d;
|
|
+ std::from_chars(s.data(), s.data() + s.size(), d);
|
|
+}
|