summaryrefslogtreecommitdiff
path: root/libstdc++-v3
diff options
context:
space:
mode:
authorpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>2007-05-11 18:58:08 +0000
committerpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>2007-05-11 18:58:08 +0000
commitc75998259b237abe9fce03ad23bf3ee0197b363a (patch)
treee42cbc75bd6a7bf2b85115f2a9d27c274708b47f /libstdc++-v3
parente6fa0ea601965ab7a19c55ca870bdb2cdebaf324 (diff)
downloadgcc-c75998259b237abe9fce03ad23bf3ee0197b363a.tar.gz
2007-05-11 Paolo Carlini <pcarlini@suse.de>
* include/ext/pod_char_traits.h (char_traits<>::move): Use __builtin_memmove. * include/bits/locale_classes.h (locale::_Impl::_M_check_same_name, collate_byname(const char*, size_t)): Use __builtin_strcmp. * include/bits/locale_facets.h: Use __builtin_mem* and __builtin_str* everywhere. * include/bits/codecvt.h (codecvt_byname(const char*, size_t)): Use __builtin_strcmp. * include/bits/char_traits.h: Use __builtin_mem* everywhere. * include/bits/fstream.tcc (basic_filebuf<>::underflow, imbue): Use __builtin_memcpy and __builtin_memmove. * include/bits/locale_facets_nonio.h (moneypunct_byname(const char*, size_t __refs)): Use __builtin_strcmp. * include/std/bitset (bitset<>::_M_do_reset): Use __builtin_memset. * config/locale/gnu/c_locale.h: Use __builtin_strlen, __builtin_strcmp, and __builtin_memcpy. * config/locale/gnu/messages_members.h: Likewise. * config/locale/gnu/time_members.h: Likewise. * config/locale/generic/c_locale.h: Likewise. * config/locale/generic/messages_members.h: Likewise. * config/locale/generic/time_members.h: Likewise. * config/os/gnu-linux/ctype_noninline.h: Likewise, avoid strdup. * config/os/tpf/ctype_noninline.h: Likewise. * config/locale/generic/codecvt_members.cc: Include <cstring>. * config/locale/generic/ctype_members.cc: Likewise. * config/locale/generic/collate_members.cc: Likewise. * config/locale/gnu/c++locale_internal.h: Likewise. * config/locale/darwin/ctype_members.cc: Likewise. * src/ctype.cc: Likewise. * testsuite/19_diagnostics/logic_error/what-1.cc: Likewise. * testsuite/19_diagnostics/logic_error/what-2.cc: Likewise. * testsuite/19_diagnostics/runtime_error/what-1.cc: Likewise. * testsuite/19_diagnostics/runtime_error/what-2.cc: Likewise. * testsuite/19_diagnostics/runtime_error/what-3.cc: Likewise. * config/locale/gnu/messages_members.cc: Avoid strdup. * config/locale/gnu/monetary_members.cc: Likewise. * config/locale/gnu/time_members.cc: Likewise. * config/locale/gnu/time_members.cc: Likewise. * config/locale/generic/c_locale.cc: Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@124623 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libstdc++-v3')
-rw-r--r--libstdc++-v3/ChangeLog68
-rw-r--r--libstdc++-v3/config/locale/darwin/ctype_members.cc1
-rw-r--r--libstdc++-v3/config/locale/generic/c_locale.cc29
-rw-r--r--libstdc++-v3/config/locale/generic/c_locale.h11
-rw-r--r--libstdc++-v3/config/locale/generic/codecvt_members.cc1
-rw-r--r--libstdc++-v3/config/locale/generic/collate_members.cc4
-rw-r--r--libstdc++-v3/config/locale/generic/ctype_members.cc1
-rw-r--r--libstdc++-v3/config/locale/generic/messages_members.h6
-rw-r--r--libstdc++-v3/config/locale/generic/time_members.cc19
-rw-r--r--libstdc++-v3/config/locale/generic/time_members.h7
-rw-r--r--libstdc++-v3/config/locale/gnu/c++locale_internal.h2
-rw-r--r--libstdc++-v3/config/locale/gnu/c_locale.h7
-rw-r--r--libstdc++-v3/config/locale/gnu/messages_members.cc18
-rw-r--r--libstdc++-v3/config/locale/gnu/messages_members.h15
-rw-r--r--libstdc++-v3/config/locale/gnu/monetary_members.cc26
-rw-r--r--libstdc++-v3/config/locale/gnu/time_members.cc21
-rw-r--r--libstdc++-v3/config/locale/gnu/time_members.h7
-rw-r--r--libstdc++-v3/config/os/gnu-linux/ctype_noninline.h46
-rw-r--r--libstdc++-v3/config/os/tpf/ctype_noninline.h29
-rw-r--r--libstdc++-v3/include/bits/char_traits.h17
-rw-r--r--libstdc++-v3/include/bits/codecvt.h3
-rw-r--r--libstdc++-v3/include/bits/fstream.tcc6
-rw-r--r--libstdc++-v3/include/bits/locale_classes.h6
-rw-r--r--libstdc++-v3/include/bits/locale_facets.h15
-rw-r--r--libstdc++-v3/include/bits/locale_facets_nonio.h3
-rw-r--r--libstdc++-v3/include/ext/pod_char_traits.h4
-rw-r--r--libstdc++-v3/include/std/bitset3
-rw-r--r--libstdc++-v3/src/ctype.cc1
-rw-r--r--libstdc++-v3/testsuite/19_diagnostics/logic_error/what-1.cc4
-rw-r--r--libstdc++-v3/testsuite/19_diagnostics/logic_error/what-2.cc4
-rw-r--r--libstdc++-v3/testsuite/19_diagnostics/runtime_error/what-1.cc4
-rw-r--r--libstdc++-v3/testsuite/19_diagnostics/runtime_error/what-2.cc4
-rw-r--r--libstdc++-v3/testsuite/19_diagnostics/runtime_error/what-3.cc4
33 files changed, 261 insertions, 135 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 11f587a7952..ec198c0705a 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,18 +1,60 @@
+2007-05-11 Paolo Carlini <pcarlini@suse.de>
+
+ * include/ext/pod_char_traits.h (char_traits<>::move):
+ Use __builtin_memmove.
+ * include/bits/locale_classes.h (locale::_Impl::_M_check_same_name,
+ collate_byname(const char*, size_t)): Use __builtin_strcmp.
+ * include/bits/locale_facets.h: Use __builtin_mem* and
+ __builtin_str* everywhere.
+ * include/bits/codecvt.h (codecvt_byname(const char*, size_t)):
+ Use __builtin_strcmp.
+ * include/bits/char_traits.h: Use __builtin_mem* everywhere.
+ * include/bits/fstream.tcc (basic_filebuf<>::underflow, imbue):
+ Use __builtin_memcpy and __builtin_memmove.
+ * include/bits/locale_facets_nonio.h (moneypunct_byname(const char*,
+ size_t __refs)): Use __builtin_strcmp.
+ * include/std/bitset (bitset<>::_M_do_reset): Use __builtin_memset.
+ * config/locale/gnu/c_locale.h: Use __builtin_strlen, __builtin_strcmp,
+ and __builtin_memcpy.
+ * config/locale/gnu/messages_members.h: Likewise.
+ * config/locale/gnu/time_members.h: Likewise.
+ * config/locale/generic/c_locale.h: Likewise.
+ * config/locale/generic/messages_members.h: Likewise.
+ * config/locale/generic/time_members.h: Likewise.
+ * config/os/gnu-linux/ctype_noninline.h: Likewise, avoid strdup.
+ * config/os/tpf/ctype_noninline.h: Likewise.
+ * config/locale/generic/codecvt_members.cc: Include <cstring>.
+ * config/locale/generic/ctype_members.cc: Likewise.
+ * config/locale/generic/collate_members.cc: Likewise.
+ * config/locale/gnu/c++locale_internal.h: Likewise.
+ * config/locale/darwin/ctype_members.cc: Likewise.
+ * src/ctype.cc: Likewise.
+ * testsuite/19_diagnostics/logic_error/what-1.cc: Likewise.
+ * testsuite/19_diagnostics/logic_error/what-2.cc: Likewise.
+ * testsuite/19_diagnostics/runtime_error/what-1.cc: Likewise.
+ * testsuite/19_diagnostics/runtime_error/what-2.cc: Likewise.
+ * testsuite/19_diagnostics/runtime_error/what-3.cc: Likewise.
+ * config/locale/gnu/messages_members.cc: Avoid strdup.
+ * config/locale/gnu/monetary_members.cc: Likewise.
+ * config/locale/gnu/time_members.cc: Likewise.
+ * config/locale/gnu/time_members.cc: Likewise.
+ * config/locale/generic/c_locale.cc: Likewise.
+
2007-05-11 Benjamin Kosnik <bkoz@redhat.com>
- * include/std/stdexcept: Remove extra spacing.
-
- * testsuite/19_diagnostics/stdexceptions.cc: Break into...
- * testsuite/19_diagnostics/bad_exception: ...this. Populate.
- * testsuite/19_diagnostics/logic_error: ... this.
- * testsuite/19_diagnostics/logic_error/what-1.cc: ...this.
- * testsuite/19_diagnostics/logic_error/what-2.cc: ...this.
- * testsuite/19_diagnostics/runtime_error: ...this.
- * testsuite/19_diagnostics/runtime_error/what-1.cc: ...this.
- * testsuite/19_diagnostics/runtime_error/what-2.cc: ...this.
- * testsuite/19_diagnostics/runtime_error/what-3.cc: ...this.
- * testsuite/19_diagnostics/23591_thread-1.c: Move...
- * testsuite/19_diagnostics/bad_exception/23591_thread-1.c: ...here.
+ * include/std/stdexcept: Remove extra spacing.
+
+ * testsuite/19_diagnostics/stdexceptions.cc: Break into...
+ * testsuite/19_diagnostics/bad_exception: ...this. Populate.
+ * testsuite/19_diagnostics/logic_error: ... this.
+ * testsuite/19_diagnostics/logic_error/what-1.cc: ...this.
+ * testsuite/19_diagnostics/logic_error/what-2.cc: ...this.
+ * testsuite/19_diagnostics/runtime_error: ...this.
+ * testsuite/19_diagnostics/runtime_error/what-1.cc: ...this.
+ * testsuite/19_diagnostics/runtime_error/what-2.cc: ...this.
+ * testsuite/19_diagnostics/runtime_error/what-3.cc: ...this.
+ * testsuite/19_diagnostics/23591_thread-1.c: Move...
+ * testsuite/19_diagnostics/bad_exception/23591_thread-1.c: ...here.
2007-05-10 Paolo Carlini <pcarlini@suse.de>
diff --git a/libstdc++-v3/config/locale/darwin/ctype_members.cc b/libstdc++-v3/config/locale/darwin/ctype_members.cc
index b50bd35d67e..ebd83219af3 100644
--- a/libstdc++-v3/config/locale/darwin/ctype_members.cc
+++ b/libstdc++-v3/config/locale/darwin/ctype_members.cc
@@ -37,6 +37,7 @@
#include <locale>
#include <bits/c++locale_internal.h>
#include <cstdlib>
+#include <cstring>
namespace std
{
diff --git a/libstdc++-v3/config/locale/generic/c_locale.cc b/libstdc++-v3/config/locale/generic/c_locale.cc
index ae1fa2899f5..732b60955f4 100644
--- a/libstdc++-v3/config/locale/generic/c_locale.cc
+++ b/libstdc++-v3/config/locale/generic/c_locale.cc
@@ -37,8 +37,10 @@
#include <cerrno> // For errno
#include <cmath> // For isinf, finite, finitef, fabs
#include <cstdlib> // For strof, strtold
+#include <cstring>
#include <locale>
#include <limits>
+#include <cstddef>
#ifdef _GLIBCXX_HAVE_IEEEFP_H
#include <ieeefp.h>
@@ -53,7 +55,10 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
const __c_locale&)
{
// Assumes __s formatted for "C" locale.
- char* __old = strdup(setlocale(LC_ALL, NULL));
+ char* __old = setlocale(LC_ALL, NULL);
+ const size_t __len = strlen(__old) + 1;
+ char* __sav = new char[__len];
+ memcpy(__sav, __old, __len);
setlocale(LC_ALL, "C");
char* __sanity;
@@ -91,8 +96,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
else
__err |= ios_base::failbit;
- setlocale(LC_ALL, __old);
- free(__old);
+ setlocale(LC_ALL, __sav);
+ delete [] __sav;
}
template<>
@@ -101,7 +106,10 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
const __c_locale&)
{
// Assumes __s formatted for "C" locale.
- char* __old = strdup(setlocale(LC_ALL, NULL));
+ char* __old = setlocale(LC_ALL, NULL);
+ const size_t __len = strlen(__old) + 1;
+ char* __sav = new char[__len];
+ memcpy(__sav, __old, __len);
setlocale(LC_ALL, "C");
char* __sanity;
@@ -121,8 +129,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
else
__err |= ios_base::failbit;
- setlocale(LC_ALL, __old);
- free(__old);
+ setlocale(LC_ALL, __sav);
+ delete [] __sav;
}
template<>
@@ -131,7 +139,10 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
ios_base::iostate& __err, const __c_locale&)
{
// Assumes __s formatted for "C" locale.
- char* __old = strdup(setlocale(LC_ALL, NULL));
+ char* __old = setlocale(LC_ALL, NULL);
+ const size_t __len = strlen(__old) + 1;
+ char* __sav = new char[__len];
+ memcpy(__sav, __old, __len);
setlocale(LC_ALL, "C");
#if !__LDBL_HAS_INFINITY__
@@ -167,8 +178,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
else
__err |= ios_base::failbit;
- setlocale(LC_ALL, __old);
- free(__old);
+ setlocale(LC_ALL, __sav);
+ delete [] __sav;
}
void
diff --git a/libstdc++-v3/config/locale/generic/c_locale.h b/libstdc++-v3/config/locale/generic/c_locale.h
index 1b7fc6ddb10..c5e3f25d886 100644
--- a/libstdc++-v3/config/locale/generic/c_locale.h
+++ b/libstdc++-v3/config/locale/generic/c_locale.h
@@ -1,6 +1,6 @@
// Wrapper for underlying C-language localization -*- C++ -*-
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -45,9 +45,9 @@
#pragma GCC system_header
#include <clocale>
-#include <cstring> // get std::strlen
#include <cstdio> // get std::vsnprintf or std::vsprintf
#include <cstdarg>
+#include <cstddef>
#define _GLIBCXX_NUM_CATEGORIES 0
@@ -66,10 +66,11 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
{
char* __old = std::setlocale(LC_NUMERIC, NULL);
char* __sav = NULL;
- if (std::strcmp(__old, "C"))
+ if (__builtin_strcmp(__old, "C"))
{
- __sav = new char[std::strlen(__old) + 1];
- std::strcpy(__sav, __old);
+ const size_t __len = __builtin_strlen(__old) + 1;
+ __sav = new char[__len];
+ __builtin_memcpy(__sav, __old, __len);
std::setlocale(LC_NUMERIC, "C");
}
diff --git a/libstdc++-v3/config/locale/generic/codecvt_members.cc b/libstdc++-v3/config/locale/generic/codecvt_members.cc
index 7b03b5b60ba..da4448d00e5 100644
--- a/libstdc++-v3/config/locale/generic/codecvt_members.cc
+++ b/libstdc++-v3/config/locale/generic/codecvt_members.cc
@@ -37,6 +37,7 @@
#include <locale>
#include <cstdlib> // For MB_CUR_MAX
#include <climits> // For MB_LEN_MAX
+#include <cstring>
_GLIBCXX_BEGIN_NAMESPACE(std)
diff --git a/libstdc++-v3/config/locale/generic/collate_members.cc b/libstdc++-v3/config/locale/generic/collate_members.cc
index f614037a238..6f3115d3637 100644
--- a/libstdc++-v3/config/locale/generic/collate_members.cc
+++ b/libstdc++-v3/config/locale/generic/collate_members.cc
@@ -1,6 +1,7 @@
// std::collate implementation details, generic version -*- C++ -*-
-// Copyright (C) 2001, 2002, 2005 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
+// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -34,6 +35,7 @@
// Written by Benjamin Kosnik <bkoz@redhat.com>
#include <locale>
+#include <cstring>
_GLIBCXX_BEGIN_NAMESPACE(std)
diff --git a/libstdc++-v3/config/locale/generic/ctype_members.cc b/libstdc++-v3/config/locale/generic/ctype_members.cc
index 3c7209d65fb..ae1c7cf1d0f 100644
--- a/libstdc++-v3/config/locale/generic/ctype_members.cc
+++ b/libstdc++-v3/config/locale/generic/ctype_members.cc
@@ -36,6 +36,7 @@
#include <locale>
#include <cstdlib>
+#include <cstring>
_GLIBCXX_BEGIN_NAMESPACE(std)
diff --git a/libstdc++-v3/config/locale/generic/messages_members.h b/libstdc++-v3/config/locale/generic/messages_members.h
index 40986886e8b..f82f2f2b646 100644
--- a/libstdc++-v3/config/locale/generic/messages_members.h
+++ b/libstdc++-v3/config/locale/generic/messages_members.h
@@ -1,6 +1,7 @@
// std::messages implementation details, generic version -*- C++ -*-
-// Copyright (C) 2001, 2003, 2004 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
+// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -83,7 +84,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
messages_byname<_CharT>::messages_byname(const char* __s, size_t __refs)
: messages<_CharT>(__refs)
{
- if (std::strcmp(__s, "C") != 0 && std::strcmp(__s, "POSIX") != 0)
+ if (__builtin_strcmp(__s, "C") != 0
+ && __builtin_strcmp(__s, "POSIX") != 0)
{
this->_S_destroy_c_locale(this->_M_c_locale_messages);
this->_S_create_c_locale(this->_M_c_locale_messages, __s);
diff --git a/libstdc++-v3/config/locale/generic/time_members.cc b/libstdc++-v3/config/locale/generic/time_members.cc
index b8ebb746b1b..08fd7a1be4f 100644
--- a/libstdc++-v3/config/locale/generic/time_members.cc
+++ b/libstdc++-v3/config/locale/generic/time_members.cc
@@ -37,6 +37,7 @@
#include <locale>
#include <cstdlib>
+#include <cstring>
_GLIBCXX_BEGIN_NAMESPACE(std)
@@ -46,11 +47,14 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
_M_put(char* __s, size_t __maxlen, const char* __format,
const tm* __tm) const
{
- char* __old = strdup(setlocale(LC_ALL, NULL));
+ char* __old = setlocale(LC_ALL, NULL);
+ const size_t __llen = strlen(__old) + 1;
+ char* __sav = new char[__llen];
+ memcpy(__sav, __old, __llen);
setlocale(LC_ALL, _M_name_timepunct);
const size_t __len = strftime(__s, __maxlen, __format, __tm);
- setlocale(LC_ALL, __old);
- free(__old);
+ setlocale(LC_ALL, __sav);
+ delete [] __sav;
// Make sure __s is null terminated.
if (__len == 0)
__s[0] = '\0';
@@ -128,11 +132,14 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
_M_put(wchar_t* __s, size_t __maxlen, const wchar_t* __format,
const tm* __tm) const
{
- char* __old = strdup(setlocale(LC_ALL, NULL));
+ char* __old = setlocale(LC_ALL, NULL);
+ const size_t __llen = strlen(__old) + 1;
+ char* __sav = new char[__llen];
+ memcpy(__sav, __old, __llen);
setlocale(LC_ALL, _M_name_timepunct);
const size_t __len = wcsftime(__s, __maxlen, __format, __tm);
- setlocale(LC_ALL, __old);
- free(__old);
+ setlocale(LC_ALL, __sav);
+ delete [] __sav;
// Make sure __s is null terminated.
if (__len == 0)
__s[0] = L'\0';
diff --git a/libstdc++-v3/config/locale/generic/time_members.h b/libstdc++-v3/config/locale/generic/time_members.h
index 8c868c01495..dc387691d9a 100644
--- a/libstdc++-v3/config/locale/generic/time_members.h
+++ b/libstdc++-v3/config/locale/generic/time_members.h
@@ -1,6 +1,7 @@
// std::time_get, std::time_put implementation, generic version -*- C++ -*-
-// Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
+// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -62,9 +63,9 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
size_t __refs)
: facet(__refs), _M_data(NULL)
{
- const size_t __len = std::strlen(__s) + 1;
+ const size_t __len = __builtin_strlen(__s) + 1;
char* __tmp = new char[__len];
- std::memcpy(__tmp, __s, __len);
+ __builtin_memcpy(__tmp, __s, __len);
_M_name_timepunct = __tmp;
try
diff --git a/libstdc++-v3/config/locale/gnu/c++locale_internal.h b/libstdc++-v3/config/locale/gnu/c++locale_internal.h
index cbce1690f46..80a1df92d9c 100644
--- a/libstdc++-v3/config/locale/gnu/c++locale_internal.h
+++ b/libstdc++-v3/config/locale/gnu/c++locale_internal.h
@@ -38,6 +38,8 @@
#include <bits/c++config.h>
#include <clocale>
#include <cstdlib>
+#include <cstring>
+#include <cstddef>
#include <langinfo.h>
#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
diff --git a/libstdc++-v3/config/locale/gnu/c_locale.h b/libstdc++-v3/config/locale/gnu/c_locale.h
index 7a71b013eee..0e1aa760f24 100644
--- a/libstdc++-v3/config/locale/gnu/c_locale.h
+++ b/libstdc++-v3/config/locale/gnu/c_locale.h
@@ -44,11 +44,11 @@
#pragma GCC system_header
-#include <cstring> // get std::strlen
#include <cstdio> // get std::vsnprintf or std::vsprintf
#include <clocale>
#include <libintl.h> // For messages
#include <cstdarg>
+#include <cstddef>
#define _GLIBCXX_C_LOCALE_GNU 1
@@ -80,8 +80,9 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
__c_locale __old = __gnu_cxx::__uselocale(__cloc);
#else
char* __old = std::setlocale(LC_ALL, NULL);
- char* __sav = new char[std::strlen(__old) + 1];
- std::strcpy(__sav, __old);
+ const size_t __len = __builtin_strlen(__old) + 1;
+ char* __sav = new char[__len];
+ __builtin_memcpy(__sav, __old, __len);
std::setlocale(LC_ALL, "C");
#endif
diff --git a/libstdc++-v3/config/locale/gnu/messages_members.cc b/libstdc++-v3/config/locale/gnu/messages_members.cc
index f206e44a636..cbecc56225b 100644
--- a/libstdc++-v3/config/locale/gnu/messages_members.cc
+++ b/libstdc++-v3/config/locale/gnu/messages_members.cc
@@ -49,11 +49,14 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
__uselocale(__old);
return string(__msg);
#else
- char* __old = strdup(setlocale(LC_ALL, NULL));
+ char* __old = setlocale(LC_ALL, NULL);
+ const size_t __len = strlen(__old) + 1;
+ char* __sav = new char[__len];
+ memcpy(__sav, __old, __len);
setlocale(LC_ALL, _M_name_messages);
const char* __msg = gettext(__dfault.c_str());
- setlocale(LC_ALL, __old);
- free(__old);
+ setlocale(LC_ALL, __sav);
+ delete [] __sav;
return string(__msg);
#endif
}
@@ -69,11 +72,14 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
__uselocale(__old);
return _M_convert_from_char(__msg);
# else
- char* __old = strdup(setlocale(LC_ALL, NULL));
+ char* __old = setlocale(LC_ALL, NULL);
+ const size_t __len = strlen(__old) + 1;
+ char* __sav = new char[__len];
+ memcpy(__sav, __old, __len);
setlocale(LC_ALL, _M_name_messages);
char* __msg = gettext(_M_convert_to_char(__dfault));
- setlocale(LC_ALL, __old);
- free(__old);
+ setlocale(LC_ALL, __sav);
+ delete [] __sav;
return _M_convert_from_char(__msg);
# endif
}
diff --git a/libstdc++-v3/config/locale/gnu/messages_members.h b/libstdc++-v3/config/locale/gnu/messages_members.h
index 31504e58bdc..21e4ccb0626 100644
--- a/libstdc++-v3/config/locale/gnu/messages_members.h
+++ b/libstdc++-v3/config/locale/gnu/messages_members.h
@@ -1,6 +1,7 @@
// std::messages implementation details, GNU version -*- C++ -*-
-// Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
+// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -52,9 +53,9 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
size_t __refs)
: facet(__refs), _M_c_locale_messages(NULL), _M_name_messages(NULL)
{
- const size_t __len = std::strlen(__s) + 1;
+ const size_t __len = __builtin_strlen(__s) + 1;
char* __tmp = new char[__len];
- std::memcpy(__tmp, __s, __len);
+ __builtin_memcpy(__tmp, __s, __len);
_M_name_messages = __tmp;
// Last to avoid leaking memory if new throws.
@@ -102,11 +103,13 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
{
if (this->_M_name_messages != locale::facet::_S_get_c_name())
delete [] this->_M_name_messages;
- char* __tmp = new char[std::strlen(__s) + 1];
- std::strcpy(__tmp, __s);
+ const size_t __len = __builtin_strlen(__s) + 1;
+ char* __tmp = new char[__len];
+ __builtin_memcpy(__tmp, __s, __len);
this->_M_name_messages = __tmp;
- if (std::strcmp(__s, "C") != 0 && std::strcmp(__s, "POSIX") != 0)
+ if (__builtin_strcmp(__s, "C") != 0
+ && __builtin_strcmp(__s, "POSIX") != 0)
{
this->_S_destroy_c_locale(this->_M_c_locale_messages);
this->_S_create_c_locale(this->_M_c_locale_messages, __s);
diff --git a/libstdc++-v3/config/locale/gnu/monetary_members.cc b/libstdc++-v3/config/locale/gnu/monetary_members.cc
index 9a417741e6a..28683b5fae4 100644
--- a/libstdc++-v3/config/locale/gnu/monetary_members.cc
+++ b/libstdc++-v3/config/locale/gnu/monetary_members.cc
@@ -383,7 +383,10 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
__c_locale __old = __uselocale(__cloc);
#else
// Switch to named locale so that mbsrtowcs will work.
- char* __old = strdup(setlocale(LC_ALL, NULL));
+ char* __old = setlocale(LC_ALL, NULL);
+ const size_t __llen = strlen(__old) + 1;
+ char* __sav = new char[__llen];
+ memcpy(__sav, __old, __llen);
setlocale(LC_ALL, __name);
#endif
@@ -457,8 +460,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
__uselocale(__old);
#else
- setlocale(LC_ALL, __old);
- free(__old);
+ setlocale(LC_ALL, __sav);
+ delete [] __sav;
#endif
__throw_exception_again;
}
@@ -478,8 +481,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
__uselocale(__old);
#else
- setlocale(LC_ALL, __old);
- free(__old);
+ setlocale(LC_ALL, __sav);
+ delete [] __sav;
#endif
}
}
@@ -525,7 +528,10 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
__c_locale __old = __uselocale(__cloc);
#else
// Switch to named locale so that mbsrtowcs will work.
- char* __old = strdup(setlocale(LC_ALL, NULL));
+ char* __old = setlocale(LC_ALL, NULL);
+ const size_t __llen = strlen(__old) + 1;
+ char* __sav = new char[__llen];
+ memcpy(__sav, __old, __llen);
setlocale(LC_ALL, __name);
#endif
@@ -600,8 +606,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
__uselocale(__old);
#else
- setlocale(LC_ALL, __old);
- free(__old);
+ setlocale(LC_ALL, __sav);
+ delete [] __sav;
#endif
__throw_exception_again;
}
@@ -620,8 +626,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
__uselocale(__old);
#else
- setlocale(LC_ALL, __old);
- free(__old);
+ setlocale(LC_ALL, __sav);
+ delete [] __sav;
#endif
}
}
diff --git a/libstdc++-v3/config/locale/gnu/time_members.cc b/libstdc++-v3/config/locale/gnu/time_members.cc
index 10faa8fe470..3c9a61fabaa 100644
--- a/libstdc++-v3/config/locale/gnu/time_members.cc
+++ b/libstdc++-v3/config/locale/gnu/time_members.cc
@@ -1,6 +1,7 @@
// std::time_get, std::time_put implementation, GNU version -*- C++ -*-
-// Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
+// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -49,11 +50,14 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
const size_t __len = __strftime_l(__s, __maxlen, __format, __tm,
_M_c_locale_timepunct);
#else
- char* __old = strdup(setlocale(LC_ALL, NULL));
+ char* __old = setlocale(LC_ALL, NULL);
+ const size_t __llen = strlen(__old) + 1;
+ char* __sav = new char[__llen];
+ memcpy(__sav, __old, __llen);
setlocale(LC_ALL, _M_name_timepunct);
const size_t __len = strftime(__s, __maxlen, __format, __tm);
- setlocale(LC_ALL, __old);
- free(__old);
+ setlocale(LC_ALL, __sav);
+ delete [] __sav;
#endif
// Make sure __s is null terminated.
if (__len == 0)
@@ -202,11 +206,14 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
const size_t __len = __wcsftime_l(__s, __maxlen, __format, __tm,
_M_c_locale_timepunct);
#else
- char* __old = strdup(setlocale(LC_ALL, NULL));
+ char* __old = setlocale(LC_ALL, NULL);
+ const size_t __llen = strlen(__old) + 1;
+ char* __sav = new char[__llen];
+ memcpy(__sav, __old, __llen);
setlocale(LC_ALL, _M_name_timepunct);
const size_t __len = wcsftime(__s, __maxlen, __format, __tm);
- setlocale(LC_ALL, __old);
- free(__old);
+ setlocale(LC_ALL, __sav);
+ delete [] __sav;
#endif
// Make sure __s is null terminated.
if (__len == 0)
diff --git a/libstdc++-v3/config/locale/gnu/time_members.h b/libstdc++-v3/config/locale/gnu/time_members.h
index b03aa57561d..7f97bcbbd7b 100644
--- a/libstdc++-v3/config/locale/gnu/time_members.h
+++ b/libstdc++-v3/config/locale/gnu/time_members.h
@@ -1,6 +1,7 @@
// std::time_get, std::time_put implementation, GNU version -*- C++ -*-
-// Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
+// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -59,9 +60,9 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
: facet(__refs), _M_data(NULL), _M_c_locale_timepunct(NULL),
_M_name_timepunct(NULL)
{
- const size_t __len = std::strlen(__s) + 1;
+ const size_t __len = __builtin_strlen(__s) + 1;
char* __tmp = new char[__len];
- std::memcpy(__tmp, __s, __len);
+ __builtin_memcpy(__tmp, __s, __len);
_M_name_timepunct = __tmp;
try
diff --git a/libstdc++-v3/config/os/gnu-linux/ctype_noninline.h b/libstdc++-v3/config/os/gnu-linux/ctype_noninline.h
index 0b895e2956e..779b26a0d49 100644
--- a/libstdc++-v3/config/os/gnu-linux/ctype_noninline.h
+++ b/libstdc++-v3/config/os/gnu-linux/ctype_noninline.h
@@ -1,6 +1,7 @@
// Locale support -*- C++ -*-
-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2004
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
+// 2006, 2007
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -48,15 +49,18 @@
ctype<char>::classic_table() throw()
{
const ctype_base::mask* __ret;
- char* __old = strdup(setlocale(LC_CTYPE, NULL));
+ char* __old = setlocale(LC_CTYPE, NULL);
+ const size_t __len = __builtin_strlen(__old) + 1;
+ char* __sav = new char[__len];
+ __builtin_memcpy(__sav, __old, __len);
setlocale(LC_CTYPE, "C");
#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
__ret = *__ctype_b_loc();
#else
__ret = __ctype_b;
#endif
- setlocale(LC_CTYPE, __old);
- free(__old);
+ setlocale(LC_CTYPE, __sav);
+ delete [] __sav;
return __ret;
}
#endif
@@ -71,8 +75,8 @@
_M_table(__table ? __table : _M_c_locale_ctype->__ctype_b),
_M_widen_ok(0), _M_narrow_ok(0)
{
- memset(_M_widen, 0, sizeof(_M_widen));
- memset(_M_narrow, 0, sizeof(_M_narrow));
+ __builtin_memset(_M_widen, 0, sizeof(_M_widen));
+ __builtin_memset(_M_narrow, 0, sizeof(_M_narrow));
}
#else
ctype<char>::ctype(__c_locale, const mask* __table, bool __del,
@@ -80,7 +84,10 @@
: facet(__refs), _M_c_locale_ctype(_S_get_c_locale()),
_M_del(__table != 0 && __del), _M_widen_ok(0), _M_narrow_ok(0)
{
- char* __old=strdup(setlocale(LC_CTYPE, NULL));
+ char* __old = setlocale(LC_CTYPE, NULL);
+ const size_t __len = __builtin_strlen(__old) + 1;
+ char* __sav = new char[__len];
+ __builtin_memcpy(__sav, __old, __len);
setlocale(LC_CTYPE, "C");
#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
_M_toupper = *__ctype_toupper_loc();
@@ -91,10 +98,10 @@
_M_tolower = __ctype_tolower;
_M_table = __table ? __table : __ctype_b;
#endif
- setlocale(LC_CTYPE, __old);
- free(__old);
- memset(_M_widen, 0, sizeof(_M_widen));
- memset(_M_narrow, 0, sizeof(_M_narrow));
+ setlocale(LC_CTYPE, __sav);
+ delete [] __sav;
+ __builtin_memset(_M_widen, 0, sizeof(_M_widen));
+ __builtin_memset(_M_narrow, 0, sizeof(_M_narrow));
}
#endif
@@ -107,15 +114,18 @@
_M_table(__table ? __table : _M_c_locale_ctype->__ctype_b),
_M_widen_ok(0), _M_narrow_ok(0)
{
- memset(_M_widen, 0, sizeof(_M_widen));
- memset(_M_narrow, 0, sizeof(_M_narrow));
+ __builtin_memset(_M_widen, 0, sizeof(_M_widen));
+ __builtin_memset(_M_narrow, 0, sizeof(_M_narrow));
}
#else
ctype<char>::ctype(const mask* __table, bool __del, size_t __refs)
: facet(__refs), _M_c_locale_ctype(_S_get_c_locale()),
_M_del(__table != 0 && __del), _M_widen_ok(0), _M_narrow_ok(0)
{
- char* __old=strdup(setlocale(LC_CTYPE, NULL));
+ char* __old = setlocale(LC_CTYPE, NULL);
+ const size_t __len = __builtin_strlen(__old) + 1;
+ char* __sav = new char[__len];
+ __builtin_memcpy(__sav, __old, __len);
setlocale(LC_CTYPE, "C");
#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
_M_toupper = *__ctype_toupper_loc();
@@ -126,10 +136,10 @@
_M_tolower = __ctype_tolower;
_M_table = __table ? __table : __ctype_b;
#endif
- setlocale(LC_CTYPE, __old);
- free(__old);
- memset(_M_widen, 0, sizeof(_M_widen));
- memset(_M_narrow, 0, sizeof(_M_narrow));
+ setlocale(LC_CTYPE, __sav);
+ delete [] __sav;
+ __builtin_memset(_M_widen, 0, sizeof(_M_widen));
+ __builtin_memset(_M_narrow, 0, sizeof(_M_narrow));
}
#endif
diff --git a/libstdc++-v3/config/os/tpf/ctype_noninline.h b/libstdc++-v3/config/os/tpf/ctype_noninline.h
index 3a42ba085c6..e2136742456 100644
--- a/libstdc++-v3/config/os/tpf/ctype_noninline.h
+++ b/libstdc++-v3/config/os/tpf/ctype_noninline.h
@@ -1,6 +1,6 @@
// Locale support -*- C++ -*-
-// Copyright (C) 2004 Free Software Foundation, Inc.
+// Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -42,11 +42,14 @@
ctype<char>::classic_table() throw()
{
const ctype_base::mask* __ret;
- char* __old = strdup(setlocale(LC_CTYPE, NULL));
+ char* __old = setlocale(LC_CTYPE, NULL);
+ const size_t __len = __builtin_strlen(__old) + 1;
+ char* __sav = new char[__len];
+ __builtin_memcpy(__sav, __old, __len);
setlocale(LC_CTYPE, "C");
__ret = *__ctype_b_loc();
- setlocale(LC_CTYPE, __old);
- free(__old);
+ setlocale(LC_CTYPE, __sav);
+ delete [] __sav;
return __ret;
}
@@ -54,26 +57,32 @@
size_t __refs)
: facet(__refs), _M_del(__table != 0 && __del)
{
- char* __old=strdup(setlocale(LC_CTYPE, NULL));
+ char* __old = setlocale(LC_CTYPE, NULL);
+ const size_t __len = __builtin_strlen(__old) + 1;
+ char* __sav = new char[__len];
+ __builtin_memcpy(__sav, __old, __len);
setlocale(LC_CTYPE, "C");
_M_toupper = *__ctype_toupper_loc();
_M_tolower = *__ctype_tolower_loc();
_M_table = __table ? __table : *__ctype_b_loc();
- setlocale(LC_CTYPE, __old);
- free(__old);
+ setlocale(LC_CTYPE, __sav);
+ delete [] __sav;
_M_c_locale_ctype = _S_get_c_locale();
}
ctype<char>::ctype(const mask* __table, bool __del, size_t __refs)
: facet(__refs), _M_del(__table != 0 && __del)
{
- char* __old=strdup(setlocale(LC_CTYPE, NULL));
+ char* __old = setlocale(LC_CTYPE, NULL);
+ const size_t __len = __builtin_strlen(__old) + 1;
+ char* __sav = new char[__len];
+ __builtin_memcpy(__sav, __old, __len);
setlocale(LC_CTYPE, "C");
_M_toupper = *__ctype_toupper_loc();
_M_tolower = *__ctype_tolower_loc();
_M_table = __table ? __table : *__ctype_b_loc();
- setlocale(LC_CTYPE, __old);
- free(__old);
+ setlocale(LC_CTYPE, __sav);
+ delete [] __sav;
_M_c_locale_ctype = _S_get_c_locale();
}
diff --git a/libstdc++-v3/include/bits/char_traits.h b/libstdc++-v3/include/bits/char_traits.h
index 03d744c643a..a4b4e3a0d64 100644
--- a/libstdc++-v3/include/bits/char_traits.h
+++ b/libstdc++-v3/include/bits/char_traits.h
@@ -43,7 +43,6 @@
#pragma GCC system_header
-#include <cstring> // For memmove, memset, memchr
#include <bits/stl_algobase.h> // For copy, fill_n
#include <bits/postypes.h> // For streampos
#include <cstdio> // For EOF
@@ -186,8 +185,8 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
char_traits<_CharT>::
move(char_type* __s1, const char_type* __s2, std::size_t __n)
{
- return static_cast<_CharT*>(std::memmove(__s1, __s2,
- __n * sizeof(char_type)));
+ return static_cast<_CharT*>(__builtin_memmove(__s1, __s2,
+ __n * sizeof(char_type)));
}
template<typename _CharT>
@@ -254,27 +253,27 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
static int
compare(const char_type* __s1, const char_type* __s2, size_t __n)
- { return memcmp(__s1, __s2, __n); }
+ { return __builtin_memcmp(__s1, __s2, __n); }
static size_t
length(const char_type* __s)
- { return strlen(__s); }
+ { return __builtin_strlen(__s); }
static const char_type*
find(const char_type* __s, size_t __n, const char_type& __a)
- { return static_cast<const char_type*>(memchr(__s, __a, __n)); }
+ { return static_cast<const char_type*>(__builtin_memchr(__s, __a, __n)); }
static char_type*
move(char_type* __s1, const char_type* __s2, size_t __n)
- { return static_cast<char_type*>(memmove(__s1, __s2, __n)); }
+ { return static_cast<char_type*>(__builtin_memmove(__s1, __s2, __n)); }
static char_type*
copy(char_type* __s1, const char_type* __s2, size_t __n)
- { return static_cast<char_type*>(memcpy(__s1, __s2, __n)); }
+ { return static_cast<char_type*>(__builtin_memcpy(__s1, __s2, __n)); }
static char_type*
assign(char_type* __s, size_t __n, char_type __a)
- { return static_cast<char_type*>(memset(__s, __a, __n)); }
+ { return static_cast<char_type*>(__builtin_memset(__s, __a, __n)); }
static char_type
to_char_type(const int_type& __c)
diff --git a/libstdc++-v3/include/bits/codecvt.h b/libstdc++-v3/include/bits/codecvt.h
index 930c798331a..d8d33070ff7 100644
--- a/libstdc++-v3/include/bits/codecvt.h
+++ b/libstdc++-v3/include/bits/codecvt.h
@@ -457,7 +457,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
codecvt_byname(const char* __s, size_t __refs = 0)
: codecvt<_InternT, _ExternT, _StateT>(__refs)
{
- if (std::strcmp(__s, "C") != 0 && std::strcmp(__s, "POSIX") != 0)
+ if (__builtin_strcmp(__s, "C") != 0
+ && __builtin_strcmp(__s, "POSIX") != 0)
{
this->_S_destroy_c_locale(this->_M_c_locale_codecvt);
this->_S_create_c_locale(this->_M_c_locale_codecvt, __s);
diff --git a/libstdc++-v3/include/bits/fstream.tcc b/libstdc++-v3/include/bits/fstream.tcc
index 2653d6f6570..28dde161490 100644
--- a/libstdc++-v3/include/bits/fstream.tcc
+++ b/libstdc++-v3/include/bits/fstream.tcc
@@ -263,14 +263,14 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
{
char* __buf = new char[__blen];
if (__remainder)
- std::memcpy(__buf, _M_ext_next, __remainder);
+ __builtin_memcpy(__buf, _M_ext_next, __remainder);
delete [] _M_ext_buf;
_M_ext_buf = __buf;
_M_ext_buf_size = __blen;
}
else if (__remainder)
- std::memmove(_M_ext_buf, _M_ext_next, __remainder);
+ __builtin_memmove(_M_ext_buf, _M_ext_next, __remainder);
_M_ext_next = _M_ext_buf;
_M_ext_end = _M_ext_buf + __remainder;
@@ -888,7 +888,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
this->gptr() - this->eback());
const streamsize __remainder = _M_ext_end - _M_ext_next;
if (__remainder)
- std::memmove(_M_ext_buf, _M_ext_next, __remainder);
+ __builtin_memmove(_M_ext_buf, _M_ext_next, __remainder);
_M_ext_next = _M_ext_buf;
_M_ext_end = _M_ext_buf + __remainder;
diff --git a/libstdc++-v3/include/bits/locale_classes.h b/libstdc++-v3/include/bits/locale_classes.h
index 5e6a8105d8b..60de2695677 100644
--- a/libstdc++-v3/include/bits/locale_classes.h
+++ b/libstdc++-v3/include/bits/locale_classes.h
@@ -44,7 +44,6 @@
#pragma GCC system_header
#include <bits/localefwd.h>
-#include <cstring> // For strcmp.
#include <string>
#include <ext/atomicity.h>
@@ -537,7 +536,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
if (_M_names[1])
// We must actually compare all the _M_names: can be all equal!
for (size_t __i = 0; __ret && __i < _S_categories_size - 1; ++__i)
- __ret = std::strcmp(_M_names[__i], _M_names[__i + 1]) == 0;
+ __ret = __builtin_strcmp(_M_names[__i], _M_names[__i + 1]) == 0;
return __ret;
}
@@ -810,7 +809,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
collate_byname(const char* __s, size_t __refs = 0)
: collate<_CharT>(__refs)
{
- if (std::strcmp(__s, "C") != 0 && std::strcmp(__s, "POSIX") != 0)
+ if (__builtin_strcmp(__s, "C") != 0
+ && __builtin_strcmp(__s, "POSIX") != 0)
{
this->_S_destroy_c_locale(this->_M_c_locale_collate);
this->_S_create_c_locale(this->_M_c_locale_collate, __s);
diff --git a/libstdc++-v3/include/bits/locale_facets.h b/libstdc++-v3/include/bits/locale_facets.h
index 42865a69c37..7a89927fadd 100644
--- a/libstdc++-v3/include/bits/locale_facets.h
+++ b/libstdc++-v3/include/bits/locale_facets.h
@@ -899,7 +899,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
{
if (_M_widen_ok == 1)
{
- memcpy(__to, __lo, __hi - __lo);
+ __builtin_memcpy(__to, __lo, __hi - __lo);
return __hi;
}
if (!_M_widen_ok)
@@ -964,7 +964,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
{
if (__builtin_expect(_M_narrow_ok == 1, true))
{
- memcpy(__to, __lo, __hi - __lo);
+ __builtin_memcpy(__to, __lo, __hi - __lo);
return __hi;
}
if (!_M_narrow_ok)
@@ -1101,7 +1101,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
virtual const char*
do_widen(const char* __lo, const char* __hi, char_type* __dest) const
{
- memcpy(__dest, __lo, __hi - __lo);
+ __builtin_memcpy(__dest, __lo, __hi - __lo);
return __hi;
}
@@ -1154,7 +1154,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
do_narrow(const char_type* __lo, const char_type* __hi,
char, char* __dest) const
{
- memcpy(__dest, __lo, __hi - __lo);
+ __builtin_memcpy(__dest, __lo, __hi - __lo);
return __hi;
}
@@ -1169,7 +1169,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
_M_widen_ok = 1;
// Set _M_widen_ok to 2 if memcpy can't be used.
- if (memcmp(__tmp, _M_widen, sizeof(_M_widen)))
+ if (__builtin_memcmp(__tmp, _M_widen, sizeof(_M_widen)))
_M_widen_ok = 2;
}
@@ -1184,7 +1184,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
do_narrow(__tmp, __tmp + sizeof(__tmp), 0, _M_narrow);
_M_narrow_ok = 1;
- if (memcmp(__tmp, _M_narrow, sizeof(_M_narrow)))
+ if (__builtin_memcmp(__tmp, _M_narrow, sizeof(_M_narrow)))
_M_narrow_ok = 2;
else
{
@@ -1922,7 +1922,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
numpunct_byname(const char* __s, size_t __refs = 0)
: numpunct<_CharT>(__refs)
{
- if (std::strcmp(__s, "C") != 0 && std::strcmp(__s, "POSIX") != 0)
+ if (__builtin_strcmp(__s, "C") != 0
+ && __builtin_strcmp(__s, "POSIX") != 0)
{
__c_locale __tmp;
this->_S_create_c_locale(__tmp, __s);
diff --git a/libstdc++-v3/include/bits/locale_facets_nonio.h b/libstdc++-v3/include/bits/locale_facets_nonio.h
index 15de0834fbe..31c90e3b43c 100644
--- a/libstdc++-v3/include/bits/locale_facets_nonio.h
+++ b/libstdc++-v3/include/bits/locale_facets_nonio.h
@@ -1320,7 +1320,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
moneypunct_byname(const char* __s, size_t __refs = 0)
: moneypunct<_CharT, _Intl>(__refs)
{
- if (std::strcmp(__s, "C") != 0 && std::strcmp(__s, "POSIX") != 0)
+ if (__builtin_strcmp(__s, "C") != 0
+ && __builtin_strcmp(__s, "POSIX") != 0)
{
__c_locale __tmp;
this->_S_create_c_locale(__tmp, __s);
diff --git a/libstdc++-v3/include/ext/pod_char_traits.h b/libstdc++-v3/include/ext/pod_char_traits.h
index ab3d99e12ef..64bd7df4b59 100644
--- a/libstdc++-v3/include/ext/pod_char_traits.h
+++ b/libstdc++-v3/include/ext/pod_char_traits.h
@@ -140,8 +140,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
static char_type*
move(char_type* __s1, const char_type* __s2, size_t __n)
{
- return static_cast<char_type*>(std::memmove(__s1, __s2,
- __n * sizeof(char_type)));
+ return static_cast<char_type*>
+ (__builtin_memmove(__s1, __s2, __n * sizeof(char_type)));
}
static char_type*
diff --git a/libstdc++-v3/include/std/bitset b/libstdc++-v3/include/std/bitset
index 61cad289b55..9ead05915dc 100644
--- a/libstdc++-v3/include/std/bitset
+++ b/libstdc++-v3/include/std/bitset
@@ -51,7 +51,6 @@
#pragma GCC system_header
#include <cstddef> // For size_t
-#include <cstring> // For memset
#include <string>
#include <bits/functexcept.h> // For invalid_argument, out_of_range,
// overflow_error
@@ -165,7 +164,7 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD)
void
_M_do_reset()
- { std::memset(_M_w, 0, _Nw * sizeof(_WordT)); }
+ { __builtin_memset(_M_w, 0, _Nw * sizeof(_WordT)); }
bool
_M_is_equal(const _Base_bitset<_Nw>& __x) const
diff --git a/libstdc++-v3/src/ctype.cc b/libstdc++-v3/src/ctype.cc
index 4a2e896f7bb..a77e8e5b010 100644
--- a/libstdc++-v3/src/ctype.cc
+++ b/libstdc++-v3/src/ctype.cc
@@ -29,6 +29,7 @@
#include <locale>
#include <cstdlib>
+#include <cstring>
_GLIBCXX_BEGIN_NAMESPACE(std)
diff --git a/libstdc++-v3/testsuite/19_diagnostics/logic_error/what-1.cc b/libstdc++-v3/testsuite/19_diagnostics/logic_error/what-1.cc
index f8245ecb628..d5e36d2df84 100644
--- a/libstdc++-v3/testsuite/19_diagnostics/logic_error/what-1.cc
+++ b/libstdc++-v3/testsuite/19_diagnostics/logic_error/what-1.cc
@@ -1,6 +1,7 @@
// 2001-02-26 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2001, 2002, 2007 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
+// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -22,6 +23,7 @@
#include <string>
#include <stdexcept>
+#include <cstring>
#include <testsuite_hooks.h>
// libstdc++/1972
diff --git a/libstdc++-v3/testsuite/19_diagnostics/logic_error/what-2.cc b/libstdc++-v3/testsuite/19_diagnostics/logic_error/what-2.cc
index 7b8077b1000..030b5e8f61f 100644
--- a/libstdc++-v3/testsuite/19_diagnostics/logic_error/what-2.cc
+++ b/libstdc++-v3/testsuite/19_diagnostics/logic_error/what-2.cc
@@ -1,6 +1,7 @@
// 2001-02-26 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2001, 2002, 2007 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
+// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -22,6 +23,7 @@
#include <string>
#include <stdexcept>
+#include <cstring>
#include <testsuite_hooks.h>
// libstdc++/2089
diff --git a/libstdc++-v3/testsuite/19_diagnostics/runtime_error/what-1.cc b/libstdc++-v3/testsuite/19_diagnostics/runtime_error/what-1.cc
index 64fd201b7a2..a46a421db2e 100644
--- a/libstdc++-v3/testsuite/19_diagnostics/runtime_error/what-1.cc
+++ b/libstdc++-v3/testsuite/19_diagnostics/runtime_error/what-1.cc
@@ -1,6 +1,7 @@
// 2001-02-26 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2001, 2002, 2007 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
+// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -22,6 +23,7 @@
#include <string>
#include <stdexcept>
+#include <cstring>
#include <testsuite_hooks.h>
// libstdc++/1972
diff --git a/libstdc++-v3/testsuite/19_diagnostics/runtime_error/what-2.cc b/libstdc++-v3/testsuite/19_diagnostics/runtime_error/what-2.cc
index 49c56e2d5c4..779c1f51806 100644
--- a/libstdc++-v3/testsuite/19_diagnostics/runtime_error/what-2.cc
+++ b/libstdc++-v3/testsuite/19_diagnostics/runtime_error/what-2.cc
@@ -1,6 +1,7 @@
// 2001-02-26 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2001, 2002, 2007 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
+// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -22,6 +23,7 @@
#include <string>
#include <stdexcept>
+#include <cstring>
#include <testsuite_hooks.h>
// libstdc++/2089
diff --git a/libstdc++-v3/testsuite/19_diagnostics/runtime_error/what-3.cc b/libstdc++-v3/testsuite/19_diagnostics/runtime_error/what-3.cc
index 31560877fd4..04b85c0c5fe 100644
--- a/libstdc++-v3/testsuite/19_diagnostics/runtime_error/what-3.cc
+++ b/libstdc++-v3/testsuite/19_diagnostics/runtime_error/what-3.cc
@@ -1,6 +1,7 @@
// 2001-02-26 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
+// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -22,6 +23,7 @@
#include <string>
#include <stdexcept>
+#include <cstring>
#include <testsuite_hooks.h>
// test copy ctors and assignment operators