This patch moves the two argument delete operator into its own file. When a program provides its own definition of operator delete (void *), but not operator delete (void *, size_t), we could end up linking two files that define _ZdlPv resulting in a linker error. Bootstraps with no test regressions on a x86_64 machine running linux. Ok for google/4_7 and google/main branches?
Google ref b/6982747 2012-10-11 Easwaran Raman <era...@google.com> * libsupc++/Makefile.am: Add del_opsz.cc to sources. * libsupc++/Makefile.in: Regenerated. * libsupc++/del_opsz.cc: New file. * libsupc++/del_op.cc(operator delete(void*,std::size_t)): Remove. Index: libstdc++-v3/libsupc++/Makefile.in =================================================================== --- libstdc++-v3/libsupc++/Makefile.in (revision 192373) +++ libstdc++-v3/libsupc++/Makefile.in (working copy) @@ -92,8 +92,8 @@ LTLIBRARIES = $(noinst_LTLIBRARIES) $(toolexeclib_ libsupc___la_LIBADD = am__objects_1 = array_type_info.lo atexit_arm.lo bad_alloc.lo \ bad_cast.lo bad_typeid.lo class_type_info.lo del_op.lo \ - del_opnt.lo del_opv.lo del_opvnt.lo dyncast.lo eh_alloc.lo \ - eh_arm.lo eh_aux_runtime.lo eh_call.lo eh_catch.lo \ + del_opsz.lo del_opnt.lo del_opv.lo del_opvnt.lo dyncast.lo \ + eh_alloc.lo eh_arm.lo eh_aux_runtime.lo eh_call.lo eh_catch.lo \ eh_exception.lo eh_globals.lo eh_personality.lo eh_ptr.lo \ eh_term_handler.lo eh_terminate.lo eh_tm.lo eh_throw.lo \ eh_type.lo eh_unex_handler.lo enum_type_info.lo \ @@ -362,6 +362,7 @@ sources = \ bad_typeid.cc \ class_type_info.cc \ del_op.cc \ + del_opsz.cc \ del_opnt.cc \ del_opv.cc \ del_opvnt.cc \ Index: libstdc++-v3/libsupc++/del_op.cc =================================================================== --- libstdc++-v3/libsupc++/del_op.cc (revision 192373) +++ libstdc++-v3/libsupc++/del_op.cc (working copy) @@ -47,11 +47,3 @@ operator delete(void* ptr) _GLIBCXX_USE_NOEXCEPT if (ptr) std::free(ptr); } - -_GLIBCXX_WEAK_DEFINITION void -operator delete(void* ptr, - std::size_t bytes __attribute__((__unused__))) throw () -{ - if (ptr) - std::free(ptr); -} Index: libstdc++-v3/libsupc++/del_opsz.cc =================================================================== --- libstdc++-v3/libsupc++/del_opsz.cc (revision 0) +++ libstdc++-v3/libsupc++/del_opsz.cc (revision 0) @@ -0,0 +1,50 @@ +// Boilerplate support routines for -*- C++ -*- dynamic memory management. + +// Copyright (C) 2012 +// Free Software Foundation +// +// This file is part of GCC. +// +// GCC is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 3, or (at your option) +// any later version. +// +// GCC is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// <http://www.gnu.org/licenses/>. + +#include <bits/c++config.h> + +#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, + std::size_t bytes __attribute__((__unused__))) throw () +{ + if (ptr) + std::free(ptr); +} Index: libstdc++-v3/libsupc++/Makefile.am =================================================================== --- libstdc++-v3/libsupc++/Makefile.am (revision 192373) +++ libstdc++-v3/libsupc++/Makefile.am (working copy) @@ -53,6 +53,7 @@ sources = \ bad_typeid.cc \ class_type_info.cc \ del_op.cc \ + del_opsz.cc \ del_opnt.cc \ del_opv.cc \ del_opvnt.cc \ -- This patch is available for review at http://codereview.appspot.com/6655052