Bug #99799 Please add `#include <string>` to i_s.cc
Submitted: 8 Jun 2020 7:09 Modified: 11 Dec 2020 8:25
Reporter: Christopher Chavez (OCA) Email Updates:
Status: Unsupported Impact on me:
None 
Category:MySQL Server: InnoDB Plugin storage engine Severity:S3 (Non-critical)
Version:5.6.48 OS:MacOS
Assigned to: CPU Architecture:Any

[8 Jun 2020 7:09] Christopher Chavez
Description:
While I am aware MySQL 5.6 is now considered unsupported on macOS, the MacPorts package manager is trying to continue offering it if possible. I attempted updating their mysql56 package from 5.6.47 to 5.6.48, and found that the changes introduced by https://github.com/mysql/mysql-server/commit/0b0c30641fd66336e87394ac28587e40864f8af9 as part of the fix for #95125 lead to compilation failure. Although I have so far only observed this failure on macOS, I believe it may affect other platforms, potentially including supported ones.

Example failure:

[ 56%] Building CXX object storage/innobase/CMakeFiles/innobase.dir/handler/i_s.cc.o
cd /opt/local/var/macports/build/_Users_runner_runners_2.169.1_work_1_s_databases_mysql56/mysql56/work/build/storage/innobase && /usr/bin/clang++  -DHAVE_CONFIG_H -DHAVE_IB_ATOMIC_PTHREAD_T_GCC=1 -DHAVE_IB_GCC_ATOMIC_BUILTINS=1 -DHAVE_IB_GCC_ATOMIC_BUILTINS_64=1 -DHAVE_IB_GCC_ATOMIC_BUILTINS_BYTE=1 -DHAVE_IB_GCC_ATOMIC_TEST_AND_SET=1 -DHAVE_IB_GCC_ATOMIC_THREAD_FENCE=1 -DHAVE_IB_GCC_SYNC_SYNCHRONISE=1 -DHAVE_LIBEVENT2 -DHAVE_TLSv13 -DSIZEOF_PTHREAD_T=8 -I/opt/local/var/macports/build/_Users_runner_runners_2.169.1_work_1_s_databases_mysql56/mysql56/work/build/include -I/opt/local/var/macports/build/_Users_runner_runners_2.169.1_work_1_s_databases_mysql56/mysql56/work/mysql-5.6.48/storage/innobase/include -I/opt/local/var/macports/build/_Users_runner_runners_2.169.1_work_1_s_databases_mysql56/mysql56/work/mysql-5.6.48/storage/innobase/handler -I/opt/local/var/macports/build/_Users_runner_runners_2.169.1_work_1_s_databases_mysql56/mysql56/work/mysql-5.6.48/include -I/opt/local/var/macports/build/_Users_runner_runners_2.169.1_work_1_s_databases_mysql56/mysql56/work/mysql-5.6.48/sql -I/opt/local/var/macports/build/_Users_runner_runners_2.169.1_work_1_s_databases_mysql56/mysql56/work/mysql-5.6.48/regex -I/opt/local/include  -pipe -Os -stdlib=libc++ -isysroot/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk -Wall -Wextra -Wformat-security -Wvla -Woverloaded-virtual -Wno-unused-parameter -Wno-tautological-pointer-compare -Wno-ignored-qualifiers -Wno-null-conversion -Wno-unused-private-field -DNDEBUG -DDBUG_OFF -arch x86_64 -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk -mmacosx-version-min=10.14   -isysroot/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk -o CMakeFiles/innobase.dir/handler/i_s.cc.o -c /opt/local/var/macports/build/_Users_runner_runners_2.169.1_work_1_s_databases_mysql56/mysql56/work/mysql-5.6.48/storage/innobase/handler/i_s.cc
[…]
/opt/local/var/macports/build/_Users_runner_runners_2.169.1_work_1_s_databases_mysql56/mysql56/work/mysql-5.6.48/storage/innobase/handler/i_s.cc:3018:14: error: implicit instantiation of undefined template 'std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >'
        std::string fts_table_name(fts_internal_tbl_name);
                    ^
/Library/Developer/CommandLineTools/usr/include/c++/v1/iosfwd:193:32: note: template is declared here
    class _LIBCPP_TEMPLATE_VIS basic_string;
                               ^
/opt/local/var/macports/build/_Users_runner_runners_2.169.1_work_1_s_databases_mysql56/mysql56/work/mysql-5.6.48/storage/innobase/handler/i_s.cc:3451:14: error: implicit instantiation of undefined template 'std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >'
        std::string fts_table_name(fts_internal_tbl_name);
                    ^
/Library/Developer/CommandLineTools/usr/include/c++/v1/iosfwd:193:32: note: template is declared here
    class _LIBCPP_TEMPLATE_VIS basic_string;
                               ^
/opt/local/var/macports/build/_Users_runner_runners_2.169.1_work_1_s_databases_mysql56/mysql56/work/mysql-5.6.48/storage/innobase/handler/i_s.cc:3912:14: error: implicit instantiation of undefined template 'std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >'
        std::string fts_table_name(fts_internal_tbl_name);
                    ^
/Library/Developer/CommandLineTools/usr/include/c++/v1/iosfwd:193:32: note: template is declared here
    class _LIBCPP_TEMPLATE_VIS basic_string;
                               ^
/opt/local/var/macports/build/_Users_runner_runners_2.169.1_work_1_s_databases_mysql56/mysql56/work/mysql-5.6.48/storage/innobase/handler/i_s.cc:4082:14: error: implicit instantiation of undefined template 'std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >'
        std::string fts_table_name(fts_internal_tbl_name);
                    ^
/Library/Developer/CommandLineTools/usr/include/c++/v1/iosfwd:193:32: note: template is declared here
    class _LIBCPP_TEMPLATE_VIS basic_string;
                               ^
[…]
4 errors generated.
make[2]: *** [storage/innobase/CMakeFiles/innobase.dir/handler/i_s.cc.o] Error 1

How to repeat:
Attempt to build MySQL 5.6.48 using any of the following:

macOS 10.14, Xcode 10.3 and 11.3.1
macOS 10.13, Xcode 9.4.1
macOS 10.12, Xcode 8.3.3
macOS 10.11, Xcode 7.3.1

Suggested fix:
Adding

#include <string>

to storage/innobase/handler/i_s.cc allows MySQL 5.6.48 to build on macOS. From looking online, some recommended explicitly including this to ensure portability whenever std::string is used.
[8 Jun 2020 7:13] Christopher Chavez
Patch to add `#include <string>` to i_s.cc

Attachment: patch-storage-innobase-handler-i_s.cc.diff (application/octet-stream, text), 435 bytes.

[9 Jun 2020 13:40] MySQL Verification Team
Hi Mr. Chavez,

Thank you for your bug report.

However, 5.6 is not longer supported on macOS platform, so we can not do anything about your report.

Unsupported ......
[7 Aug 2020 12:09] MySQL Verification Team
It is unsupported.
[11 Dec 2020 8:25] Christopher Chavez
This issue was fixed in MySQL 5.6.50.