From: Tor Didriksen Date: April 4 2011 8:47am Subject: bzr commit into mysql-trunk branch (tor.didriksen:3355) Bug#11929733 List-Archive: http://lists.mysql.com/commits/134595 X-Bug: 11929733 Message-Id: <20110404084731.3FFC43784@atum07.norway.sun.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============5206287943224065634==" --===============5206287943224065634== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///export/home/didrik/repo/trunk-implicit-template/ based on revid:vasil.dimov@stripped 3355 Tor Didriksen 2011-04-04 Bug#11929733 - 59607: REMOVE THE FNO-IMPLICIT-TEMPLATES COMPILATION FLAG Explicit template instantiations introduces extra code maintenance, and actually yields code bloat with modern gcc compilers/linkers: - we instantiate code which is un-used - we disable optimization of common code for pointer-based templates The mysqld executable size shrinks with about 200Kb with this patch. removed: extra/yassl/src/template_instnt.cpp extra/yassl/taocrypt/src/template_instnt.cpp modified: cmake/ssl.cmake config.h.cmake configure.cmake extra/yassl/CMakeLists.txt extra/yassl/src/crypto_wrapper.cpp extra/yassl/src/yassl_int.cpp extra/yassl/taocrypt/CMakeLists.txt extra/yassl/taocrypt/src/algebra.cpp extra/yassl/taocrypt/src/integer.cpp sql/binlog.cc sql/field.cc sql/filesort.cc sql/item.cc sql/item_buff.cc sql/keycaches.cc sql/mysqld.cc sql/opt_range.cc sql/rpl_slave.cc sql/sql_acl.cc sql/sql_class.cc sql/sql_insert.cc sql/sql_select.cc sql/sql_show.cc sql/sys_vars.h sql/table.cc unittest/gunit/CMakeLists.txt === modified file 'cmake/ssl.cmake' --- a/cmake/ssl.cmake 2010-07-19 14:17:07 +0000 +++ b/cmake/ssl.cmake 2011-04-04 08:47:25 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2009 Sun Microsystems, Inc +# Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -27,16 +27,8 @@ MACRO (MYSQL_USE_BUNDLED_SSL) SET(SSL_INTERNAL_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/extra/yassl/taocrypt/mySTL) SET(SSL_DEFINES "-DHAVE_YASSL -DYASSL_PURE_C -DYASSL_PREFIX -DHAVE_OPENSSL -DYASSL_THREAD_SAFE") CHANGE_SSL_SETTINGS("bundled") - #Remove -fno-implicit-templates - #(yassl sources cannot be compiled with it) - SET(SAVE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) - IF(CMAKE_CXX_FLAGS) - STRING(REPLACE "-fno-implicit-templates" "" CMAKE_CXX_FLAGS - ${CMAKE_CXX_FLAGS}) - ENDIF() ADD_SUBDIRECTORY(extra/yassl) ADD_SUBDIRECTORY(extra/yassl/taocrypt) - SET(CMAKE_CXX_FLAGS ${SAVE_CXX_FLAGS}) GET_TARGET_PROPERTY(src yassl SOURCES) FOREACH(file ${src}) SET(SSL_SOURCES ${SSL_SOURCES} ${CMAKE_SOURCE_DIR}/extra/yassl/${file}) === modified file 'config.h.cmake' --- a/config.h.cmake 2011-02-02 18:31:39 +0000 +++ b/config.h.cmake 2011-04-04 08:47:25 +0000 @@ -40,7 +40,6 @@ #cmakedefine HAVE_FNMATCH_H 1 #cmakedefine HAVE_FPU_CONTROL_H 1 #cmakedefine HAVE_GRP_H 1 -#cmakedefine HAVE_EXPLICIT_TEMPLATE_INSTANTIATION 1 #cmakedefine HAVE_IA64INTRIN_H 1 #cmakedefine HAVE_IEEEFP_H 1 #cmakedefine HAVE_INTTYPES_H 1 === modified file 'configure.cmake' --- a/configure.cmake 2011-02-02 18:31:39 +0000 +++ b/configure.cmake 2011-04-04 08:47:25 +0000 @@ -1,5 +1,4 @@ - -# Copyright (C) 2009 Sun Microsystems,Inc +# Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -67,15 +66,7 @@ IF(CMAKE_COMPILER_IS_GNUCXX) # MySQL "canonical" GCC flags. At least -fno-rtti flag affects # ABI and cannot be simply removed. SET(CMAKE_CXX_FLAGS - "${CMAKE_CXX_FLAGS} -fno-implicit-templates -fno-exceptions -fno-rtti") - IF(CMAKE_CXX_FLAGS) - STRING(REGEX MATCH "fno-implicit-templates" NO_IMPLICIT_TEMPLATES - ${CMAKE_CXX_FLAGS}) - IF (NO_IMPLICIT_TEMPLATES) - SET(HAVE_EXPLICIT_TEMPLATE_INSTANTIATION TRUE) - ENDIF() - ENDIF() - + "${CMAKE_CXX_FLAGS} -fno-exceptions -fno-rtti") IF (CMAKE_EXE_LINKER_FLAGS MATCHES " -static " OR CMAKE_EXE_LINKER_FLAGS MATCHES " -static$") SET(HAVE_DLOPEN FALSE CACHE "Disable dlopen due to -static flag" FORCE) === modified file 'extra/yassl/CMakeLists.txt' --- a/extra/yassl/CMakeLists.txt 2010-12-29 00:26:31 +0000 +++ b/extra/yassl/CMakeLists.txt 2011-04-04 08:47:25 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2006, 2011, Oracle and/or its affiliates. All rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -20,20 +20,11 @@ INCLUDE_DIRECTORIES( ${CMAKE_SOURCE_DIR}/extra/yassl/taocrypt/mySTL) ADD_DEFINITIONS(${SSL_DEFINES}) -IF(CMAKE_COMPILER_IS_GNUXX) - #Remove -fno-implicit-templates - #(yassl sources cannot be compiled with it) - STRING(REPLACE "-fno-implicit-templates" "" CMAKE_CXX_FLAGS -${CMAKE_CXX_FLAGS}) -ENDIF() + SET(YASSL_SOURCES src/buffer.cpp src/cert_wrapper.cpp src/crypto_wrapper.cpp src/handshake.cpp src/lock.cpp src/log.cpp src/socket_wrapper.cpp src/ssl.cpp src/timer.cpp src/yassl_error.cpp src/yassl_imp.cpp src/yassl_int.cpp) -IF(HAVE_EXPLICIT_TEMPLATE_INSTANTIATION) - SET(YASSL_SOURCES ${YASSL_SOURCES} src/template_instnt.cpp) -ENDIF() - ADD_CONVENIENCE_LIBRARY(yassl ${YASSL_SOURCES}) RESTRICT_SYMBOL_EXPORTS(yassl) === modified file 'extra/yassl/src/crypto_wrapper.cpp' --- a/extra/yassl/src/crypto_wrapper.cpp 2010-07-02 18:30:47 +0000 +++ b/extra/yassl/src/crypto_wrapper.cpp 2011-04-04 08:47:25 +0000 @@ -1,5 +1,4 @@ -/* - Copyright (C) 2000-2007 MySQL AB +/* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -11,10 +10,8 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, - MA 02110-1301 USA. -*/ + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /* The crypto wrapper source implements the policies for the cipher * components used by SSL. @@ -991,24 +988,4 @@ x509* PemToDer(FILE* file, CertType type } // namespace -#ifdef HAVE_EXPLICIT_TEMPLATE_INSTANTIATION -namespace yaSSL { -template void ysDelete(DiffieHellman::DHImpl*); -template void ysDelete(Integer::IntegerImpl*); -template void ysDelete(RSA::RSAImpl*); -template void ysDelete(DSS::DSSImpl*); -template void ysDelete(RandomPool::RandomImpl*); -template void ysDelete(AES::AESImpl*); -template void ysDelete(RC4::RC4Impl*); -template void ysDelete(DES_EDE::DES_EDEImpl*); -template void ysDelete(DES::DESImpl*); -template void ysDelete(HMAC_RMD::HMAC_RMDImpl*); -template void ysDelete(HMAC_SHA::HMAC_SHAImpl*); -template void ysDelete(HMAC_MD5::HMAC_MD5Impl*); -template void ysDelete(RMD::RMDImpl*); -template void ysDelete(SHA::SHAImpl*); -template void ysDelete(MD5::MD5Impl*); -} -#endif // HAVE_EXPLICIT_TEMPLATE_INSTANTIATION - #endif // !USE_CRYPTOPP_LIB === removed file 'extra/yassl/src/template_instnt.cpp' --- a/extra/yassl/src/template_instnt.cpp 2009-05-15 12:57:51 +0000 +++ b/extra/yassl/src/template_instnt.cpp 1970-01-01 00:00:00 +0000 @@ -1,110 +0,0 @@ -/* - Copyright (C) 2000-2007 MySQL AB - - This program 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; version 2 of the License. - - This program 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. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, - MA 02110-1301 USA. -*/ - - -/* Explicit template instantiation requests - */ - - -#include "runtime.hpp" -#include "handshake.hpp" -#include "yassl_int.hpp" -#include "crypto_wrapper.hpp" -#include "hmac.hpp" -#include "md5.hpp" -#include "sha.hpp" -#include "ripemd.hpp" -#include "openssl/ssl.h" - -#ifdef HAVE_EXPLICIT_TEMPLATE_INSTANTIATION - -namespace mySTL { -template class list; -template yaSSL::del_ptr_zero for_each(mySTL::list::iterator, mySTL::list::iterator, yaSSL::del_ptr_zero); -template pair* uninit_copy*, mySTL::pair*>(mySTL::pair*, mySTL::pair*, mySTL::pair*); -template pair* uninit_copy*, mySTL::pair*>(mySTL::pair*, mySTL::pair*, mySTL::pair*); -template void destroy*>(mySTL::pair*, mySTL::pair*); -template void destroy*>(mySTL::pair*, mySTL::pair*); -template pair* uninit_copy*, mySTL::pair*>(mySTL::pair*, mySTL::pair*, mySTL::pair*); -template void destroy*>(mySTL::pair*, mySTL::pair*); -template pair* uninit_copy*, mySTL::pair*>(mySTL::pair*, mySTL::pair*, mySTL::pair*); -template class list; -template class list; -template class list; -template class list; -template class list; -template class list; -template class list; -template void destroy*>(mySTL::pair*, mySTL::pair*); -template yaSSL::del_ptr_zero for_each::iterator, yaSSL::del_ptr_zero>(mySTL::list::iterator, mySTL::list::iterator, yaSSL::del_ptr_zero); -template yaSSL::del_ptr_zero for_each::iterator, yaSSL::del_ptr_zero>(mySTL::list::iterator, mySTL::list::iterator, yaSSL::del_ptr_zero); -template yaSSL::del_ptr_zero for_each::iterator, yaSSL::del_ptr_zero>(mySTL::list::iterator, mySTL::list::iterator, yaSSL::del_ptr_zero); -template yaSSL::del_ptr_zero for_each::iterator, yaSSL::del_ptr_zero>(mySTL::list::iterator, mySTL::list::iterator, yaSSL::del_ptr_zero); -template yaSSL::del_ptr_zero for_each::iterator, yaSSL::del_ptr_zero>(mySTL::list::iterator, mySTL::list::iterator, yaSSL::del_ptr_zero); -template yaSSL::del_ptr_zero for_each::iterator, yaSSL::del_ptr_zero>(mySTL::list::iterator, mySTL::list::iterator, yaSSL::del_ptr_zero); -template yaSSL::del_ptr_zero for_each::iterator, yaSSL::del_ptr_zero>(mySTL::list::iterator, mySTL::list::iterator, yaSSL::del_ptr_zero); -template bool list::erase(list::iterator); -template void list::push_back(yaSSL::ThreadError); -template void list::pop_front(); -template void list::pop_back(); -template list::~list(); -template pair* GetArrayMemory >(size_t); -template void FreeArrayMemory >(pair*); -template pair* GetArrayMemory >(size_t); -template void FreeArrayMemory >(pair*); -template pair* GetArrayMemory >(size_t); -template void FreeArrayMemory >(pair*); -template pair* GetArrayMemory >(size_t); -template void FreeArrayMemory >(pair*); -} - -namespace yaSSL { -template void ysDelete(yaSSL::SSL_CTX*); -template void ysDelete(yaSSL::SSL*); -template void ysDelete(yaSSL::BIGNUM*); -template void ysDelete(unsigned char*); -template void ysDelete(yaSSL::DH*); -template void ysDelete(TaoCrypt::Signer*); -template void ysDelete(yaSSL::SSL_SESSION*); -template void ysDelete(input_buffer*); -template void ysDelete(output_buffer*); -template void ysDelete(x509*); -template void ysDelete(Auth*); -template void ysDelete(HandShakeBase*); -template void ysDelete(ServerKeyBase*); -template void ysDelete(ClientKeyBase*); -template void ysDelete(SSL_METHOD*); -template void ysDelete(DiffieHellman*); -template void ysDelete(BulkCipher*); -template void ysDelete(Digest*); -template void ysDelete(X509*); -template void ysDelete(Message*); -template void ysDelete(sslFactory*); -template void ysDelete(Sessions*); -template void ysDelete(Errors*); -template void ysArrayDelete(unsigned char*); -template void ysArrayDelete(char*); - -template int min(int, int); -template uint16 min(uint16, uint16); -template unsigned int min(unsigned int, unsigned int); -template unsigned long min(unsigned long, unsigned long); -} - -#endif // HAVE_EXPLICIT_TEMPLATE_INSTANTIATION - === modified file 'extra/yassl/src/yassl_int.cpp' --- a/extra/yassl/src/yassl_int.cpp 2011-03-29 08:01:07 +0000 +++ b/extra/yassl/src/yassl_int.cpp 2011-04-04 08:47:25 +0000 @@ -1,5 +1,4 @@ -/* - Copyright 2000-2008 MySQL AB, 2008 Sun Microsystems, Inc. +/* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -11,11 +10,8 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, - MA 02110-1301 USA. -*/ - + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /* yaSSL internal source implements SSL supporting types not specified in the * draft along with type conversion functions. @@ -2568,14 +2564,3 @@ extern "C" void yaSSL_CleanUp() yaSSL::sessionsInstance = 0; yaSSL::errorsInstance = 0; } - - -#ifdef HAVE_EXPLICIT_TEMPLATE_INSTANTIATION -namespace mySTL { -template yaSSL::yassl_int_cpp_local1::SumData for_each::iterator, yaSSL::yassl_int_cpp_local1::SumData>(mySTL::list::iterator, mySTL::list::iterator, yaSSL::yassl_int_cpp_local1::SumData); -template yaSSL::yassl_int_cpp_local1::SumBuffer for_each::iterator, yaSSL::yassl_int_cpp_local1::SumBuffer>(mySTL::list::iterator, mySTL::list::iterator, yaSSL::yassl_int_cpp_local1::SumBuffer); -template mySTL::list::iterator find_if::iterator, yaSSL::yassl_int_cpp_local2::sess_match>(mySTL::list::iterator, mySTL::list::iterator, yaSSL::yassl_int_cpp_local2::sess_match); -template mySTL::list::iterator find_if::iterator, yaSSL::yassl_int_cpp_local2::thr_match>(mySTL::list::iterator, mySTL::list::iterator, yaSSL::yassl_int_cpp_local2::thr_match); -} -#endif - === modified file 'extra/yassl/taocrypt/CMakeLists.txt' --- a/extra/yassl/taocrypt/CMakeLists.txt 2010-12-29 00:26:31 +0000 +++ b/extra/yassl/taocrypt/CMakeLists.txt 2011-04-04 08:47:25 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2006, 2011, Oracle and/or its affiliates. All rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -27,10 +27,6 @@ SET(TAOCRYPT_SOURCES src/aes.cpp src/ae include/md2.hpp include/md5.hpp include/misc.hpp include/modarith.hpp include/modes.hpp include/random.hpp include/ripemd.hpp include/rsa.hpp include/sha.hpp) -IF(HAVE_EXPLICIT_TEMPLATE_INSTANTIATION) - SET(TAOCRYPT_SOURCES ${TAOCRYPT_SOURCES} src/template_instnt.cpp) -ENDIF() - ADD_CONVENIENCE_LIBRARY(taocrypt ${TAOCRYPT_SOURCES}) RESTRICT_SYMBOL_EXPORTS(taocrypt) === modified file 'extra/yassl/taocrypt/src/algebra.cpp' --- a/extra/yassl/taocrypt/src/algebra.cpp 2010-07-02 18:30:47 +0000 +++ b/extra/yassl/taocrypt/src/algebra.cpp 2011-04-04 08:47:25 +0000 @@ -1,5 +1,4 @@ -/* - Copyright (C) 2000-2007 MySQL AB +/* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -11,10 +10,8 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, - MA 02110-1301 USA. -*/ + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /* based on Wei Dai's algebra.cpp from CryptoPP */ #undef NDEBUG @@ -326,14 +323,3 @@ void AbstractRing::SimultaneousExponenti } // namespace - - -#ifdef HAVE_EXPLICIT_TEMPLATE_INSTANTIATION -namespace mySTL { -template TaoCrypt::WindowSlider* uninit_copy(TaoCrypt::WindowSlider*, TaoCrypt::WindowSlider*, TaoCrypt::WindowSlider*); -template void destroy(TaoCrypt::WindowSlider*, TaoCrypt::WindowSlider*); -template TaoCrypt::WindowSlider* GetArrayMemory(size_t); -template void FreeArrayMemory(TaoCrypt::WindowSlider*); -} -#endif - === modified file 'extra/yassl/taocrypt/src/integer.cpp' --- a/extra/yassl/taocrypt/src/integer.cpp 2010-07-02 18:30:47 +0000 +++ b/extra/yassl/taocrypt/src/integer.cpp 2011-04-04 08:47:25 +0000 @@ -1,5 +1,4 @@ -/* - Copyright (C) 2000-2007 MySQL AB +/* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -11,12 +10,8 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, - MA 02110-1301 USA. -*/ - - + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /* based on Wei Dai's integer.cpp from CryptoPP */ @@ -3953,18 +3948,5 @@ Integer CRT(const Integer &xp, const Int // isn't operator overloading great? return p * (u * (xq-xp) % q) + xp; } - - -#ifdef HAVE_EXPLICIT_TEMPLATE_INSTANTIATION -#ifndef TAOCRYPT_NATIVE_DWORD_AVAILABLE -template hword DivideThreeWordsByTwo(hword*, hword, hword, Word*); -#endif -template word DivideThreeWordsByTwo(word*, word, word, DWord*); -#ifdef SSE2_INTRINSICS_AVAILABLE -template class AlignedAllocator; -#endif -#endif - - } // namespace === removed file 'extra/yassl/taocrypt/src/template_instnt.cpp' --- a/extra/yassl/taocrypt/src/template_instnt.cpp 2007-01-29 15:54:40 +0000 +++ b/extra/yassl/taocrypt/src/template_instnt.cpp 1970-01-01 00:00:00 +0000 @@ -1,82 +0,0 @@ -/* - Copyright (C) 2000-2007 MySQL AB - - This program 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; version 2 of the License. - - This program 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. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, - MA 02110-1301 USA. -*/ - - -/* Explicit template instantiation requests - */ - - -#include "runtime.hpp" -#include "integer.hpp" -#include "rsa.hpp" -#include "sha.hpp" -#include "md5.hpp" -#include "hmac.hpp" -#include "ripemd.hpp" -#include "pwdbased.hpp" -#include "algebra.hpp" -#include "vector.hpp" -#include "hash.hpp" - -#ifdef HAVE_EXPLICIT_TEMPLATE_INSTANTIATION -namespace TaoCrypt { - -#if defined(SSE2_INTRINSICS_AVAILABLE) -template AlignedAllocator::pointer StdReallocate >(AlignedAllocator&, unsigned int*, AlignedAllocator::size_type, AlignedAllocator::size_type, bool); -#endif - -template class RSA_Decryptor; -template class RSA_Encryptor; -template class RSA_Encryptor; -template void tcDelete(HASH*); -template void tcDelete(Integer*); -template void tcArrayDelete(byte*); -template AllocatorWithCleanup::pointer StdReallocate >(AllocatorWithCleanup&, byte*, AllocatorWithCleanup::size_type, AllocatorWithCleanup::size_type, bool); -template void tcArrayDelete(word*); -template AllocatorWithCleanup::pointer StdReallocate >(AllocatorWithCleanup&, word*, AllocatorWithCleanup::size_type, AllocatorWithCleanup::size_type, bool); - -#ifndef TAOCRYPT_SLOW_WORD64 // defined when word != word32 -template void tcArrayDelete(word32*); -template AllocatorWithCleanup::pointer StdReallocate >(AllocatorWithCleanup&, word32*, AllocatorWithCleanup::size_type, AllocatorWithCleanup::size_type, bool); -#endif - -template void tcArrayDelete(char*); - -template class PBKDF2_HMAC; -template class HMAC; -template class HMAC; -template class HMAC; - -} - -namespace mySTL { -template vector* uninit_fill_n*, size_t, vector >(vector*, size_t, vector const&); -template void destroy*>(vector*, vector*); -template TaoCrypt::Integer* uninit_copy(TaoCrypt::Integer*, TaoCrypt::Integer*, TaoCrypt::Integer*); -template TaoCrypt::Integer* uninit_fill_n(TaoCrypt::Integer*, size_t, TaoCrypt::Integer const&); -template void destroy(TaoCrypt::Integer*, TaoCrypt::Integer*); -template TaoCrypt::byte* GetArrayMemory(size_t); -template void FreeArrayMemory(TaoCrypt::byte*); -template TaoCrypt::Integer* GetArrayMemory(size_t); -template void FreeArrayMemory(TaoCrypt::Integer*); -template vector* GetArrayMemory >(size_t); -template void FreeArrayMemory >(vector*); -template void FreeArrayMemory(void*); -} - -#endif === modified file 'sql/binlog.cc' --- a/sql/binlog.cc 2011-03-14 17:55:26 +0000 +++ b/sql/binlog.cc 2011-04-04 08:47:25 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -5379,24 +5379,6 @@ THD::binlog_prepare_pending_rows_event(T DBUG_RETURN(pending); /* This is the current pending event */ } -#ifdef HAVE_EXPLICIT_TEMPLATE_INSTANTIATION -/* - Instantiate the versions we need, we have -fno-implicit-template as - compiling option. -*/ -template Rows_log_event* -THD::binlog_prepare_pending_rows_event(TABLE*, uint32, size_t, bool, - Write_rows_log_event*); - -template Rows_log_event* -THD::binlog_prepare_pending_rows_event(TABLE*, uint32, size_t, bool, - Delete_rows_log_event *); - -template Rows_log_event* -THD::binlog_prepare_pending_rows_event(TABLE*, uint32, size_t, bool, - Update_rows_log_event *); -#endif - /* Declare in unnamed namespace. */ CPP_UNNAMED_NS_START === modified file 'sql/field.cc' --- a/sql/field.cc 2011-03-22 11:44:40 +0000 +++ b/sql/field.cc 2011-04-04 08:47:25 +0000 @@ -40,15 +40,9 @@ // Maximum allowed exponent value for converting string to decimal #define MAX_EXPONENT 1024 -/***************************************************************************** - Instansiate templates and static variables -*****************************************************************************/ - -#ifdef HAVE_EXPLICIT_TEMPLATE_INSTANTIATION -template class List; -template class List_iterator; -#endif - +/** + Static variables +*/ uchar Field_null::null[1]={1}; const char field_separator=','; === modified file 'sql/filesort.cc' --- a/sql/filesort.cc 2011-03-17 17:39:31 +0000 +++ b/sql/filesort.cc 2011-04-04 08:47:25 +0000 @@ -37,10 +37,6 @@ #include "sql_select.h" #include "debug_sync.h" -#ifdef HAVE_EXPLICIT_TEMPLATE_INSTANTIATION -template class Bounded_queue; -#endif - /* functions defined in this file */ static void make_char_array(FILESORT_INFO *info, uint fields, uint length); === modified file 'sql/item.cc' --- a/sql/item.cc 2011-04-02 19:42:50 +0000 +++ b/sql/item.cc 2011-04-04 08:47:25 +0000 @@ -8501,14 +8501,3 @@ void view_error_processor(THD *thd, void ((TABLE_LIST *)data)->hide_view_error(thd); } -/***************************************************************************** -** Instantiate templates -*****************************************************************************/ - -#ifdef HAVE_EXPLICIT_TEMPLATE_INSTANTIATION -template class List; -template class List_iterator; -template class List_iterator_fast; -template class List_iterator_fast; -template class List; -#endif === modified file 'sql/item_buff.cc' --- a/sql/item_buff.cc 2010-08-16 06:58:42 +0000 +++ b/sql/item_buff.cc 2011-04-04 08:47:25 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -175,13 +175,3 @@ bool Cached_item_decimal::cmp() } return FALSE; } - - -/***************************************************************************** -** Instansiate templates -*****************************************************************************/ - -#ifdef HAVE_EXPLICIT_TEMPLATE_INSTANTIATION -template class List; -template class List_iterator; -#endif === modified file 'sql/keycaches.cc' --- a/sql/keycaches.cc 2010-07-08 21:42:23 +0000 +++ b/sql/keycaches.cc 2011-04-04 08:47:25 +0000 @@ -157,7 +157,3 @@ bool process_key_caches(process_key_cach return 0; } -#ifdef HAVE_EXPLICIT_TEMPLATE_INSTANTIATION -template class I_List_iterator; -#endif - === modified file 'sql/mysqld.cc' --- a/sql/mysqld.cc 2011-03-29 08:01:07 +0000 +++ b/sql/mysqld.cc 2011-04-04 08:47:25 +0000 @@ -8130,20 +8130,6 @@ void refresh_status(THD *thd) This section should go away soon *****************************************************************************/ -/***************************************************************************** - Instantiate templates -*****************************************************************************/ - -#ifdef HAVE_EXPLICIT_TEMPLATE_INSTANTIATION -/* Used templates */ -template class I_List; -template class I_List_iterator; -template class I_List; -template class I_List; -template class I_List; -template class I_List_iterator; -#endif - #ifdef HAVE_PSI_INTERFACE #ifdef HAVE_MMAP PSI_mutex_key key_PAGE_lock, key_LOCK_sync, key_LOCK_active, key_LOCK_pool; === modified file 'sql/opt_range.cc' --- a/sql/opt_range.cc 2011-04-01 14:04:52 +0000 +++ b/sql/opt_range.cc 2011-04-04 08:47:25 +0000 @@ -11963,12 +11963,3 @@ void QUICK_GROUP_MIN_MAX_SELECT::dbug_du #endif /* !DBUG_OFF */ - -/***************************************************************************** -** Instantiate templates -*****************************************************************************/ - -#ifdef HAVE_EXPLICIT_TEMPLATE_INSTANTIATION -template class List; -template class List_iterator; -#endif === modified file 'sql/rpl_slave.cc' --- a/sql/rpl_slave.cc 2011-03-29 14:56:01 +0000 +++ b/sql/rpl_slave.cc 2011-04-04 08:47:25 +0000 @@ -5486,11 +5486,6 @@ bool rpl_master_erroneous_autoinc(THD *t return FALSE; } -#ifdef HAVE_EXPLICIT_TEMPLATE_INSTANTIATION -template class I_List_iterator; -template class I_List_iterator; -#endif - /** a copy of active_mi->rli->slave_skip_counter, for showing in SHOW VARIABLES, INFORMATION_SCHEMA.GLOBAL_VARIABLES and @@sql_slave_skip_counter without === modified file 'sql/sql_acl.cc' --- a/sql/sql_acl.cc 2011-03-23 22:51:19 +0000 +++ b/sql/sql_acl.cc 2011-04-04 08:47:25 +0000 @@ -7191,17 +7191,6 @@ bool sp_grant_privileges(THD *thd, const } -/***************************************************************************** - Instantiate used templates -*****************************************************************************/ - -#ifdef HAVE_EXPLICIT_TEMPLATE_INSTANTIATION -template class List_iterator; -template class List_iterator; -template class List; -template class List; -#endif - /** Validate if a user can proxy as another user === modified file 'sql/sql_class.cc' --- a/sql/sql_class.cc 2011-03-24 08:00:03 +0000 +++ b/sql/sql_class.cc 2011-04-04 08:47:25 +0000 @@ -67,23 +67,6 @@ char empty_c_string[1]= {0}; /* used const char * const THD::DEFAULT_WHERE= "field list"; - -/***************************************************************************** -** Instansiate templates -*****************************************************************************/ - -#ifdef HAVE_EXPLICIT_TEMPLATE_INSTANTIATION -/* Used templates */ -template class List; -template class List_iterator; -template class List; -template class List_iterator; -template class List; -template class List_iterator; -template class List; -template class List_iterator; -#endif - /**************************************************************************** ** User variables ****************************************************************************/ === modified file 'sql/sql_insert.cc' --- a/sql/sql_insert.cc 2011-02-15 17:14:15 +0000 +++ b/sql/sql_insert.cc 2011-04-04 08:47:25 +0000 @@ -4138,17 +4138,3 @@ void select_create::abort_result_set() } DBUG_VOID_RETURN; } - - -/***************************************************************************** - Instansiate templates -*****************************************************************************/ - -#ifdef HAVE_EXPLICIT_TEMPLATE_INSTANTIATION -template class List_iterator_fast; -#ifndef EMBEDDED_LIBRARY -template class I_List; -template class I_List_iterator; -template class I_List; -#endif /* EMBEDDED_LIBRARY */ -#endif /* HAVE_EXPLICIT_TEMPLATE_INSTANTIATION */ === modified file 'sql/sql_select.cc' --- a/sql/sql_select.cc 2011-04-01 14:04:52 +0000 +++ b/sql/sql_select.cc 2011-04-04 08:47:25 +0000 @@ -12015,13 +12015,6 @@ public: COND_CMP(Item *a,Item_func *b) :and_level(a),cmp_func(b) {} }; -#ifdef HAVE_EXPLICIT_TEMPLATE_INSTANTIATION -template class I_List; -template class I_List_iterator; -template class List; -template class List_iterator; -#endif - /** Find the multiple equality predicate containing a field. === modified file 'sql/sql_show.cc' --- a/sql/sql_show.cc 2011-03-28 08:10:39 +0000 +++ b/sql/sql_show.cc 2011-04-04 08:47:25 +0000 @@ -1751,10 +1751,6 @@ public: CSET_STRING query_string; }; -#ifdef HAVE_EXPLICIT_TEMPLATE_INSTANTIATION -template class I_List; -#endif - static const char *thread_state_info(THD *tmp) { #ifndef EMBEDDED_LIBRARY @@ -7522,11 +7518,6 @@ ST_SCHEMA_TABLE schema_tables[]= }; -#ifdef HAVE_EXPLICIT_TEMPLATE_INSTANTIATION -template class List_iterator_fast; -template class List; -#endif - int initialize_schema_table(st_plugin_int *plugin) { ST_SCHEMA_TABLE *schema_table; === modified file 'sql/sys_vars.h' --- a/sql/sys_vars.h 2011-03-09 20:54:55 +0000 +++ b/sql/sys_vars.h 2011-04-04 08:47:25 +0000 @@ -1725,16 +1725,3 @@ public: virtual bool global_update(THD *thd, set_var *var); }; -/**************************************************************************** - Used templates -****************************************************************************/ - -#ifdef HAVE_EXPLICIT_TEMPLATE_INSTANTIATION -template class List; -template class List_iterator_fast; -template class Sys_var_unsigned; -template class Sys_var_unsigned; -template class Sys_var_unsigned; -template class Sys_var_unsigned; -#endif - === modified file 'sql/table.cc' --- a/sql/table.cc 2011-03-28 08:10:39 +0000 +++ b/sql/table.cc 2011-04-04 08:47:25 +0000 @@ -5488,13 +5488,3 @@ bool is_simple_order(ORDER *order) } return TRUE; } - - -/***************************************************************************** -** Instansiate templates -*****************************************************************************/ - -#ifdef HAVE_EXPLICIT_TEMPLATE_INSTANTIATION -template class List; -template class List_iterator; -#endif === modified file 'unittest/gunit/CMakeLists.txt' --- a/unittest/gunit/CMakeLists.txt 2011-02-17 14:39:47 +0000 +++ b/unittest/gunit/CMakeLists.txt 2011-04-04 08:47:25 +0000 @@ -25,10 +25,6 @@ ELSE() ENDIF() IF(CMAKE_COMPILER_IS_GNUCXX) - # Remove -fno-implicit-templates, gunit sources cannot be compiled with it. - STRING(REPLACE "-fno-implicit-templates" "" CMAKE_CXX_FLAGS - ${CMAKE_CXX_FLAGS}) - # MySQL is often compiled/linked with gcc rather than g++ # (to avoid dependencies on libstdc++.so) # This does not work for googletest binaries. --===============5206287943224065634== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/tor.didriksen@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: tor.didriksen@stripped\ # k8mehtjjg83uyueg # target_branch: file:///export/home/didrik/repo/trunk-implicit-\ # template/ # testament_sha1: 59f1e5da1d60885ac64de492801d864900e20ce0 # timestamp: 2011-04-04 10:47:31 +0200 # base_revision_id: vasil.dimov@stripped\ # 3v7e8evt7o12ssu0 # # Begin bundle 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 --===============5206287943224065634==--