aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc Glisse <marc.glisse@inria.fr>2013-10-03 18:16:40 +0200
committerMarc Glisse <glisse@gcc.gnu.org>2013-10-03 16:16:40 +0000
commitfc7657bb382e789ce7468950ca1c5fa0b9061ec5 (patch)
tree81cd0ed1e80d7cf449e6cfe7494c4bddb0dabe94
parent2284b03444d6845ce6402db37f4ec43f6c755f77 (diff)
downloadgcc-fc7657bb382e789ce7468950ca1c5fa0b9061ec5.zip
gcc-fc7657bb382e789ce7468950ca1c5fa0b9061ec5.tar.gz
gcc-fc7657bb382e789ce7468950ca1c5fa0b9061ec5.tar.bz2
del_op.cc (operator delete): Don't test for 0 before free.
2013-10-03 Marc Glisse <marc.glisse@inria.fr> * libsupc++/del_op.cc (operator delete): Don't test for 0 before free. * libsupc++/del_opnt.cc (free): Only declare if freestanding. (operator delete): Qualify free with std::. From-SVN: r203164
-rw-r--r--libstdc++-v3/ChangeLog6
-rw-r--r--libstdc++-v3/libsupc++/del_op.cc3
-rw-r--r--libstdc++-v3/libsupc++/del_opnt.cc18
3 files changed, 22 insertions, 5 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index c17ca80..c09e856 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,9 @@
+2013-10-03 Marc Glisse <marc.glisse@inria.fr>
+
+ * libsupc++/del_op.cc (operator delete): Don't test for 0 before free.
+ * libsupc++/del_opnt.cc (free): Only declare if freestanding.
+ (operator delete): Qualify free with std::.
+
2013-10-02 Jonathan Wakely <jwakely.gcc@gmail.com>
Daniel Krugler <daniel.kruegler@gmail.com>
diff --git a/libstdc++-v3/libsupc++/del_op.cc b/libstdc++-v3/libsupc++/del_op.cc
index 2d860e1..ee446c3 100644
--- a/libstdc++-v3/libsupc++/del_op.cc
+++ b/libstdc++-v3/libsupc++/del_op.cc
@@ -43,6 +43,5 @@ _GLIBCXX_END_NAMESPACE_VERSION
_GLIBCXX_WEAK_DEFINITION void
operator delete(void* ptr) _GLIBCXX_USE_NOEXCEPT
{
- if (ptr)
- std::free(ptr);
+ std::free(ptr);
}
diff --git a/libstdc++-v3/libsupc++/del_opnt.cc b/libstdc++-v3/libsupc++/del_opnt.cc
index bb37191..a04ea40 100644
--- a/libstdc++-v3/libsupc++/del_opnt.cc
+++ b/libstdc++-v3/libsupc++/del_opnt.cc
@@ -24,12 +24,24 @@
// <http://www.gnu.org/licenses/>.
#include <bits/c++config.h>
-#include "new"
-extern "C" void free (void *);
+#if !_GLIBCXX_HOSTED
+// A freestanding C runtime may not provide "free" -- but there is no
+// other reasonable way to implement "operator delete".
+namespace std
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+ extern "C" void free(void*);
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace
+#else
+# include <cstdlib>
+#endif
+
+#include "new"
_GLIBCXX_WEAK_DEFINITION void
operator delete (void *ptr, const std::nothrow_t&) _GLIBCXX_USE_NOEXCEPT
{
- free (ptr);
+ std::free(ptr);
}