From: Tor Didriksen Date: April 1 2011 2:20pm Subject: bzr commit into mysql-trunk branch (tor.didriksen:3352) Bug#11929733 List-Archive: http://lists.mysql.com/commits/134479 X-Bug: 11929733 Message-Id: <20110401142029.0F0BC37EE@atum07.norway.sun.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============5804982357855411687==" --===============5804982357855411687== 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:jorgen.loland@stripped 3352 Tor Didriksen 2011-04-01 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-01 14:20:23 +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-01 14:20:23 +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-01 14:20:23 +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-01 14:20:23 +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-01 14:20:23 +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-01 14:20:23 +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-01 14:20:23 +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-01 14:20:23 +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-01 14:20:23 +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-01 14:20:23 +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-01 14:20:23 +0000 @@ -41,14 +41,9 @@ #define MAX_EXPONENT 1024 /***************************************************************************** - Instansiate templates and static variables + Instantiate static variables *****************************************************************************/ -#ifdef HAVE_EXPLICIT_TEMPLATE_INSTANTIATION -template class List; -template class List_iterator; -#endif - 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-01 14:20:23 +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-03-30 07:42:03 +0000 +++ b/sql/item.cc 2011-04-01 14:20:23 +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-01 14:20:23 +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-01 14:20:23 +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-01 14:20:23 +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-01 14:20:23 +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-01 14:20:23 +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-01 14:20:23 +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-01 14:20:23 +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-01 14:20:23 +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-01 14:20:23 +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-01 14:20:23 +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-01 14:20:23 +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-01 14:20:23 +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-01 14:20:23 +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. --===============5804982357855411687== 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\ # obsafv86a2qjlmtp # target_branch: file:///export/home/didrik/repo/trunk-implicit-\ # template/ # testament_sha1: bf4a6772e0ff9acc5e34eb680e0df7f6e131443a # timestamp: 2011-04-01 16:20:28 +0200 # base_revision_id: jorgen.loland@stripped\ # dc3lfm7m6ii3auna # # Begin bundle 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 --===============5804982357855411687==--