public inbox for libstdc++-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r14-6590] libstdc++: Do not add padding for std::print to std::ostream
@ 2023-12-15 13:21 Jonathan Wakely
0 siblings, 0 replies; only message in thread
From: Jonathan Wakely @ 2023-12-15 13:21 UTC (permalink / raw)
To: gcc-cvs, libstdc++-cvs
https://gcc.gnu.org/g:8a5cac92e7c20e13f01ca0cfa5dc00d014caf0d3
commit r14-6590-g8a5cac92e7c20e13f01ca0cfa5dc00d014caf0d3
Author: Jonathan Wakely <jwakely@redhat.com>
Date: Fri Dec 15 12:21:36 2023 +0000
libstdc++: Do not add padding for std::print to std::ostream
Tim Song pointed out that although std::print behaves as a formatted
output function, it does "determine padding" using the stream's flags.
libstdc++-v3/ChangeLog:
* include/std/ostream (vprint_nonunicode, vprint_unicode): Do
not insert padding.
* testsuite/27_io/basic_ostream/print/1.cc: Adjust expected
behaviour.
Diff:
---
libstdc++-v3/include/std/ostream | 46 +---------------------
.../testsuite/27_io/basic_ostream/print/1.cc | 10 +++--
2 files changed, 8 insertions(+), 48 deletions(-)
diff --git a/libstdc++-v3/include/std/ostream b/libstdc++-v3/include/std/ostream
index 4f1cdc281a3..0cac293e4d6 100644
--- a/libstdc++-v3/include/std/ostream
+++ b/libstdc++-v3/include/std/ostream
@@ -891,21 +891,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__try
{
- const streamsize __w = __os.width();
- const streamsize __n = __out.size();
- if (__w > __n)
- {
- const bool __left
- = (__os.flags() & ios_base::adjustfield) == ios_base::left;
- if (!__left)
- std::__ostream_fill(__os, __w - __n);
- if (__os.good())
- std::__ostream_write(__os, __out.data(), __n);
- if (__left && __os.good())
- std::__ostream_fill(__os, __w - __n);
- }
- else
- std::__ostream_write(__os, __out.data(), __n);
+ std::__ostream_write(__os, __out.data(), __out.size());
}
__catch(const __cxxabiv1::__forced_unwind&)
{
@@ -923,11 +909,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
ostream::sentry __cerb(__os);
if (__cerb)
{
-
- const streamsize __w = __os.width();
- const bool __left
- = (__os.flags() & ios_base::adjustfield) == ios_base::left;
-
__format::_Str_sink<char> __buf;
std::vformat_to(__buf.out(), __os.getloc(), __fmt, __args);
auto __out = __buf.view();
@@ -938,18 +919,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// If stream refers to a terminal, write a Unicode string to it.
if (auto __term = __open_terminal(__os.rdbuf()))
{
- __format::_Str_sink<char> __buf2;
- if (__w != 0)
- {
- char __fmt[] = "{0:..{1}}";
- __fmt[3] == __os.fill();
- __fmt[4] == __left ? '<' : '>';
- string_view __str(__out);
- std::vformat_to(__buf2.out(), // N.B. no need to use getloc()
- __fmt, std::make_format_args(__str, __w));
- __out = __buf2.view();
- }
-
ios_base::iostate __err = ios_base::goodbit;
__try
{
@@ -981,18 +950,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// Otherwise just insert the string as normal.
__try
{
- const streamsize __n = __out.size();
- if (__w > __n)
- {
- if (!__left)
- std::__ostream_fill(__os, __w - __n);
- if (__os.good())
- std::__ostream_write(__os, __out.data(), __n);
- if (__left && __os.good())
- std::__ostream_fill(__os, __w - __n);
- }
- else
- std::__ostream_write(__os, __out.data(), __n);
+ std::__ostream_write(__os, __out.data(), __out.size());
}
__catch(const __cxxabiv1::__forced_unwind&)
{
diff --git a/libstdc++-v3/testsuite/27_io/basic_ostream/print/1.cc b/libstdc++-v3/testsuite/27_io/basic_ostream/print/1.cc
index 28dc8af33e6..b3abc570d1e 100644
--- a/libstdc++-v3/testsuite/27_io/basic_ostream/print/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_ostream/print/1.cc
@@ -42,14 +42,16 @@ test_print_raw()
}
void
-test_print_formatted()
+test_print_no_padding()
{
+ // [ostream.formatted.print] does not say this function "determines padding",
+ // see https://gcc.gnu.org/pipermail/gcc-patches/2023-December/640680.html
char buf[64];
std::spanstream os(buf);
- os << std::setw(20) << std::setfill('*') << std::right;
+ os << std::setw(60) << std::setfill('?') << std::right; // should be ignored
std::print(os, "{} Luftballons", 99);
std::string_view txt(os.span());
- VERIFY( txt == "******99 Luftballons" );
+ VERIFY( txt == "99 Luftballons" );
}
void
@@ -106,7 +108,7 @@ int main()
test_print_ostream();
test_println_ostream();
test_print_raw();
- test_print_formatted();
+ test_print_no_padding();
test_vprint_nonunicode();
test_locale();
}
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2023-12-15 13:21 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-12-15 13:21 [gcc r14-6590] libstdc++: Do not add padding for std::print to std::ostream Jonathan Wakely
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).