aboutsummaryrefslogtreecommitdiff
path: root/libstdc++-v3
diff options
context:
space:
mode:
authorPaolo Carlini <pcarlini@unitus.it>2003-10-10 19:10:47 +0200
committerPaolo Carlini <paolo@gcc.gnu.org>2003-10-10 17:10:47 +0000
commit6b61bca48f4d07a471176ab1285ae346d8a8dc6a (patch)
tree809614ad8ac2d034a844a7aa54550d9e0f67a2e0 /libstdc++-v3
parentfc45d351334f0e3d8247eda15861d992fa10f7e9 (diff)
downloadgcc-6b61bca48f4d07a471176ab1285ae346d8a8dc6a.zip
gcc-6b61bca48f4d07a471176ab1285ae346d8a8dc6a.tar.gz
gcc-6b61bca48f4d07a471176ab1285ae346d8a8dc6a.tar.bz2
2003-10-10 Paolo Carlini <pcarlini@unitus.it>
* include/bits/ostream.tcc (operator<<(basic_ostream&, _CharT)) Avoid unnecessarily calling __builtin_alloca and dealing explicitly with width() smaller than zero. (operator<<(basic_ostream&, char), operator<<(basic_ostream&, const _CharT*), operator<<(basic_ostream<_CharT, _Traits>&, const char*), operator<<(basic_ostream<char, _Traits>&, const char*), operator<<(basic_ostream, const basic_string&)): Likewise. From-SVN: r72302
Diffstat (limited to 'libstdc++-v3')
-rw-r--r--libstdc++-v3/ChangeLog11
-rw-r--r--libstdc++-v3/include/bits/ostream.tcc63
2 files changed, 44 insertions, 30 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 08950d9..865d9be 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,14 @@
+2003-10-10 Paolo Carlini <pcarlini@unitus.it>
+
+ * include/bits/ostream.tcc (operator<<(basic_ostream&, _CharT))
+ Avoid unnecessarily calling __builtin_alloca and dealing
+ explicitly with width() smaller than zero.
+ (operator<<(basic_ostream&, char), operator<<(basic_ostream&,
+ const _CharT*), operator<<(basic_ostream<_CharT, _Traits>&,
+ const char*), operator<<(basic_ostream<char, _Traits>&,
+ const char*), operator<<(basic_ostream, const basic_string&)):
+ Likewise.
+
2003-10-09 Benjamin Kosnik <bkoz@redhat.com>
* config/linker-map.gnu: Make more *_type_info bits visible.
diff --git a/libstdc++-v3/include/bits/ostream.tcc b/libstdc++-v3/include/bits/ostream.tcc
index 401b58f..fee2f27 100644
--- a/libstdc++-v3/include/bits/ostream.tcc
+++ b/libstdc++-v3/include/bits/ostream.tcc
@@ -471,17 +471,18 @@ namespace std
{
try
{
- const streamsize __w = __out.width() > 0 ? __out.width() : 0;
- _CharT* __pads = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) * (__w + 1)));
- __pads[0] = __c;
+ const streamsize __w = __out.width();
streamsize __len = 1;
+ _CharT* __cs = &__c;
if (__w > __len)
{
- __pad<_CharT, _Traits>::_S_pad(__out, __out.fill(), __pads,
+ __cs = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT)
+ * __w));
+ __pad<_CharT, _Traits>::_S_pad(__out, __out.fill(), __cs,
&__c, __w, __len, false);
__len = __w;
}
- __out._M_write(__pads, __len);
+ __out._M_write(__cs, __len);
__out.width(0);
}
catch(...)
@@ -507,17 +508,17 @@ namespace std
{
try
{
- const streamsize __w = __out.width() > 0 ? __out.width() : 0;
- char* __pads = static_cast<char*>(__builtin_alloca(__w + 1));
- __pads[0] = __c;
+ const streamsize __w = __out.width();
streamsize __len = 1;
+ char* __cs = &__c;
if (__w > __len)
{
- __pad<char, _Traits>::_S_pad(__out, __out.fill(), __pads,
+ __cs = static_cast<char*>(__builtin_alloca(__w));
+ __pad<char, _Traits>::_S_pad(__out, __out.fill(), __cs,
&__c, __w, __len, false);
__len = __w;
}
- __out._M_write(__pads, __len);
+ __out._M_write(__cs, __len);
__out.width(0);
}
catch(...)
@@ -542,14 +543,15 @@ namespace std
{
try
{
- const streamsize __w = __out.width() > 0 ? __out.width() : 0;
- _CharT* __pads = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) * __w));
+ const streamsize __w = __out.width();
streamsize __len = static_cast<streamsize>(_Traits::length(__s));
if (__w > __len)
{
- __pad<_CharT, _Traits>::_S_pad(__out, __out.fill(), __pads,
+ _CharT* __cs = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT)
+ * __w));
+ __pad<_CharT, _Traits>::_S_pad(__out, __out.fill(), __cs,
__s, __w, __len, false);
- __s = __pads;
+ __s = __cs;
__len = __w;
}
__out._M_write(__s, __len);
@@ -583,22 +585,23 @@ namespace std
if (__cerb && __s)
{
size_t __clen = __traits_type::length(__s);
- _CharT* __ws = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) * (__clen + 1)));
+ _CharT* __ws = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT)
+ * __clen));
for (size_t __i = 0; __i < __clen; ++__i)
__ws[__i] = __out.widen(__s[__i]);
_CharT* __str = __ws;
try
{
+ const streamsize __w = __out.width();
streamsize __len = static_cast<streamsize>(__clen);
- const streamsize __w = __out.width() > 0 ? __out.width() : 0;
- _CharT* __pads = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) * __w));
-
if (__w > __len)
{
- __pad<_CharT, _Traits>::_S_pad(__out, __out.fill(), __pads,
+ _CharT* __cs = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT)
+ * __w));
+ __pad<_CharT, _Traits>::_S_pad(__out, __out.fill(), __cs,
__ws, __w, __len, false);
- __str = __pads;
+ __str = __cs;
__len = __w;
}
__out._M_write(__str, __len);
@@ -629,15 +632,14 @@ namespace std
{
try
{
- const streamsize __w = __out.width() > 0 ? __out.width() : 0;
- char* __pads = static_cast<char*>(__builtin_alloca(__w));
+ const streamsize __w = __out.width();
streamsize __len = static_cast<streamsize>(_Traits::length(__s));
-
if (__w > __len)
{
- __pad<char, _Traits>::_S_pad(__out, __out.fill(), __pads,
+ char* __cs = static_cast<char*>(__builtin_alloca(__w));
+ __pad<char, _Traits>::_S_pad(__out, __out.fill(), __cs,
__s, __w, __len, false);
- __s = __pads;
+ __s = __cs;
__len = __w;
}
__out._M_write(__s, __len);
@@ -667,18 +669,19 @@ namespace std
typename __ostream_type::sentry __cerb(__out);
if (__cerb)
{
- const _CharT* __s = __str.data();
- const streamsize __w = __out.width() > 0 ? __out.width() : 0;
- _CharT* __pads = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) * __w));
+ const streamsize __w = __out.width();
streamsize __len = static_cast<streamsize>(__str.size());
+ const _CharT* __s = __str.data();
#ifdef _GLIBCXX_RESOLVE_LIB_DEFECTS
// 25. String operator<< uses width() value wrong
#endif
if (__w > __len)
{
- __pad<_CharT, _Traits>::_S_pad(__out, __out.fill(), __pads, __s,
+ _CharT* __cs = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT)
+ * __w));
+ __pad<_CharT, _Traits>::_S_pad(__out, __out.fill(), __cs, __s,
__w, __len, false);
- __s = __pads;
+ __s = __cs;
__len = __w;
}
__out._M_write(__s, __len);