aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2022-04-21 11:26:49 +0100
committerJonathan Wakely <jwakely@redhat.com>2022-04-21 11:31:51 +0100
commitcf37107522f465d9e12af01ba68d2d1df0f18d46 (patch)
tree6831a07dd93f42be54f30327a0cfa3a765f70520
parent811c7fbd147991645e6116897f07d8a406b864e6 (diff)
downloadgcc-cf37107522f465d9e12af01ba68d2d1df0f18d46.zip
gcc-cf37107522f465d9e12af01ba68d2d1df0f18d46.tar.gz
gcc-cf37107522f465d9e12af01ba68d2d1df0f18d46.tar.bz2
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. libstdc++-v3/ChangeLog: 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.
-rw-r--r--libstdc++-v3/src/c++17/floating_from_chars.cc1
-rw-r--r--libstdc++-v3/testsuite/20_util/from_chars/pr105324.cc14
2 files changed, 14 insertions, 1 deletions
diff --git a/libstdc++-v3/src/c++17/floating_from_chars.cc b/libstdc++-v3/src/c++17/floating_from_chars.cc
index bbe03f7..0f5183a 100644
--- a/libstdc++-v3/src/c++17/floating_from_chars.cc
+++ b/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;
diff --git a/libstdc++-v3/testsuite/20_util/from_chars/pr105324.cc b/libstdc++-v3/testsuite/20_util/from_chars/pr105324.cc
new file mode 100644
index 0000000..cecb17e
--- /dev/null
+++ b/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);
+}