[MDEV-9527] build FAILs with GCC 5.1 with release supported "-std=c+11" Created: 2016-02-07  Updated: 2017-02-17  Resolved: 2016-03-22

Status: Closed
Project: MariaDB Server
Component/s: Compiling
Affects Version/s: 10.1.11
Fix Version/s: 5.5.49, 10.0.25, 10.1.13

Type: Bug Priority: Major
Reporter: pgnd Assignee: Sergei Golubchik
Resolution: Fixed Votes: 0
Labels: None

Issue Links:
Relates
relates to MDEV-9308 Fix build errors with recent gcc (isf... Closed

 Description   

Per https://gcc.gnu.org/projects/cxx1y.html

C++14 support (CXXFLAGS ="... -std=c++14") in GCC 5 is still experimental

Important: Because the final ISO C++14 standard was only recently published, GCC's support is experimental

OTOH, per https://gcc.gnu.org/projects/cxx0x.html

Important: Before GCC 5.1 support for C++11 was experimental. Some features were implemented based on early proposals, and no attempt was made to maintain backward compatibility when they were updated to match the final C++11 standard.

and particularly, https://gcc.gnu.org/gcc-5/changes.html#libstdcxx

Full support for C++11, including the following new features: ...

C++11 support (CXXFLAGS ="... -std=c++11") in GCC 5.1 is in RELEASE.

With MDB 10.1 latest

git log | head
    commit 07b8aefe90ca830d2de068f2966cd2288b158a88
    Author: Sergei Petrunia <psergey@askmonty.org>
    Date:   Wed Feb 3 00:15:49 2016 +0300
 
        MDEV-9504: ANALYZE TABLE shows wrong 'rows' value for ORDER BY query
        
        Revert the patch for MDEV-9504.
        It causes test failures, attempt to fix these causes more failures. The
        source of all this is that the code in test_if_skip_sort_order() has
        a peculiar way of treating select_limit parameter:

cmake & build with config

    cmake .. \
    ...
     -DCMAKE_CXX_FLAGS="-fno-delete-null-pointer-checks -D_FORTIFY_SOURCE=2 -fmessage-length=0 -fstack-protector -march=x86-64 -mtune=nocona"

results in no errors on config or build

changing

    cmake .. \
    ...
-    -DCMAKE_CXX_FLAGS="-fno-delete-null-pointer-checks -D_FORTIFY_SOURCE=2 -fmessage-length=0 -fstack-protector -march=x86-64 -mtune=nocona"
+    -DCMAKE_CXX_FLAGS="-fno-delete-null-pointer-checks -D_FORTIFY_SOURCE=2 -fmessage-length=0 -fstack-protector -march=x86-64 -mtune=nocona -std=c++11"

results in NO error on config, but FAILs on subsequent build

make -j4 V=1
    Scanning dependencies of target abi_check
    Scanning dependencies of target INFO_BIN
    Scanning dependencies of target INFO_SRC
    Scanning dependencies of target strings
    Scanning dependencies of target readline
    [  0%] Built target INFO_BIN
    ...
    [  3%] Building C object extra/readline/CMakeFiles/readline.dir/complete.c.o
    [  3%] Building C object strings/CMakeFiles/strings.dir/ctype-eucjpms.c.o
    In file included from /usr/local/src/mariadb/plugin/handler_socket/libhsclient/hstcpcli.cpp:13:0:
    /usr/local/src/mariadb/plugin/handler_socket/libhsclient/hstcpcli.hpp:33:14: warning: ‘template<class> class std::auto_ptr’ is deprecated [-Wdeprecated-declarations]
     typedef std::auto_ptr<hstcpcli_i> hstcpcli_ptr;
                  ^
    In file included from /usr/include/c++/5/memory:81:0,
                     from /usr/local/src/mariadb/plugin/handler_socket/libhsclient/hstcpcli.hpp:15,
                     from /usr/local/src/mariadb/plugin/handler_socket/libhsclient/hstcpcli.cpp:13:
    /usr/include/c++/5/bits/unique_ptr.h:49:28: note: declared here
       template<typename> class auto_ptr;
                                ^
    [  3%] Building C object strings/CMakeFiles/strings.dir/ctype-extra.c.o
    ...
    [ 28%] Building CXX object extra/CMakeFiles/innochecksum.dir/__/storage/innobase/ut/ut0crc32.cc.o
    In file included from /usr/local/src/mariadb/sql/item.h:4500:0,
                     from /usr/local/src/mariadb/sql/sql_lex.h:26,
                     from /usr/local/src/mariadb/sql/sql_class.h:495,
                     from /usr/local/src/mariadb/sql/sql_acl.h:21,
                     from /usr/local/src/mariadb/sql/sql_parse.h:20,
                     from /usr/local/src/mariadb/sql/ha_partition.cc:51:
    /usr/local/src/mariadb/sql/item_func.h: In member function ‘double Item_func::check_float_overflow(double)’:
    /usr/local/src/mariadb/sql/item_func.h:235:26: error: ‘isfinite’ was not declared in this scope
         return isfinite(value) ? value : raise_float_overflow();
                              ^
    /usr/local/src/mariadb/sql/item_func.h:235:26: note: suggested alternative:
    In file included from /usr/include/c++/5/random:38:0,
                     from /usr/include/c++/5/bits/stl_algo.h:66,
                     from /usr/include/c++/5/algorithm:62,
                     from /usr/local/src/mariadb/sql/mdl.h:33,
                     from /usr/local/src/mariadb/sql/handler.h:35,
                     from /usr/local/src/mariadb/sql/log.h:20,
                     from /usr/local/src/mariadb/sql/sql_class.h:27,
                     from /usr/local/src/mariadb/sql/sql_acl.h:21,
                     from /usr/local/src/mariadb/sql/sql_parse.h:20,
                     from /usr/local/src/mariadb/sql/ha_partition.cc:51:
    /usr/include/c++/5/cmath:601:5: note:   ‘std::isfinite’
         isfinite(_Tp __x)
         ^
    [ 28%] Building CXX object extra/CMakeFiles/innochecksum.dir/__/storage/innobase/ut/ut0ut.cc.o
    [ 28%] Building CXX object extra/CMakeFiles/innochecksum.dir/__/storage/innobase/page/page0zip.cc.o
    Scanning dependencies of target xtradb
    [ 28%] Building C object libmysql/CMakeFiles/clientlib.dir/__/sql-common/my_time.c.o
    sql/CMakeFiles/partition.dir/build.make:62: recipe for target 'sql/CMakeFiles/partition.dir/ha_partition.cc.o' failed
    make[2]: *** [sql/CMakeFiles/partition.dir/ha_partition.cc.o] Error 1
    CMakeFiles/Makefile2:5345: recipe for target 'sql/CMakeFiles/partition.dir/all' failed
    make[1]: *** [sql/CMakeFiles/partition.dir/all] Error 2
    make[1]: *** Waiting for unfinished jobs....
    [ 28%] Building C object libmysql/CMakeFiles/clientlib.dir/__/sql-common/client_plugin.c.o
    ...
    [ 31%] Building CXX object storage/xtradb/CMakeFiles/xtradb.dir/dict/dict0load.cc.o
    In file included from /usr/local/src/mariadb/storage/xtradb/include/fts0priv.h:650:0,
                     from /usr/local/src/mariadb/storage/xtradb/dict/dict0crea.cc:46:
    /usr/local/src/mariadb/storage/xtradb/include/fts0priv.ic:56:24: warning: invalid suffix on literal; C++11 requires a space between literal and string macro [-Wliteral-suffix]
        return(sprintf(str, "%016"PRIu64, id)););
                            ^
    /usr/local/src/mariadb/storage/xtradb/include/fts0priv.ic:69:23: warning: invalid suffix on literal; C++11 requires a space between literal and string macro [-Wliteral-suffix]
       return(sprintf(str, "%016"PRIu64, id));
                           ^
    In file included from /usr/local/src/mariadb/storage/xtradb/include/fts0priv.h:650:0,
                     from /usr/local/src/mariadb/storage/xtradb/dict/dict0load.cc:47:
    /usr/local/src/mariadb/storage/xtradb/include/fts0priv.ic:56:24: warning: invalid suffix on literal; C++11 requires a space between literal and string macro [-Wliteral-suffix]
        return(sprintf(str, "%016"PRIu64, id)););
                            ^
    /usr/local/src/mariadb/storage/xtradb/include/fts0priv.ic:69:23: warning: invalid suffix on literal; C++11 requires a space between literal and string macro [-Wliteral-suffix]
       return(sprintf(str, "%016"PRIu64, id));
                           ^
    [ 31%] Building CXX object storage/xtradb/CMakeFiles/xtradb.dir/dict/dict0mem.cc.o
    In file included from /usr/local/src/mariadb/storage/xtradb/include/fts0priv.h:650:0,
                     from /usr/local/src/mariadb/storage/xtradb/dict/dict0mem.cc:37:
    /usr/local/src/mariadb/storage/xtradb/include/fts0priv.ic:56:24: warning: invalid suffix on literal; C++11 requires a space between literal and string macro [-Wliteral-suffix]
        return(sprintf(str, "%016"PRIu64, id)););
                            ^
    /usr/local/src/mariadb/storage/xtradb/include/fts0priv.ic:69:23: warning: invalid suffix on literal; C++11 requires a space between literal and string macro [-Wliteral-suffix]
       return(sprintf(str, "%016"PRIu64, id));
                           ^
    [ 32%] Building CXX object storage/xtradb/CMakeFiles/xtradb.dir/dict/dict0stats.cc.o
    ...
    [ 33%] Building CXX object storage/xtradb/CMakeFiles/xtradb.dir/fts/fts0blex.cc.o
    In file included from /usr/local/src/mariadb/storage/xtradb/include/fts0priv.h:650:0,
                     from /usr/local/src/mariadb/storage/xtradb/fts/fts0fts.cc:31:
    /usr/local/src/mariadb/storage/xtradb/include/fts0priv.ic:56:24: warning: invalid suffix on literal; C++11 requires a space between literal and string macro [-Wliteral-suffix]
        return(sprintf(str, "%016"PRIu64, id)););
                            ^
    /usr/local/src/mariadb/storage/xtradb/include/fts0priv.ic:69:23: warning: invalid suffix on literal; C++11 requires a space between literal and string macro [-Wliteral-suffix]
       return(sprintf(str, "%016"PRIu64, id));
                           ^
    /usr/local/src/mariadb/storage/xtradb/fts/fts0fts.cc:6277:23: warning: invalid suffix on literal; C++11 requires a space between literal and string macro [-Wliteral-suffix]
      ret = sscanf(tmp_id, "%016"PRIu64, &dec_id);
                           ^
    [ 33%] Building CXX object storage/xtradb/CMakeFiles/xtradb.dir/fts/fts0config.cc.o
    [ 33%] Building CXX object storage/xtradb/CMakeFiles/xtradb.dir/fts/fts0opt.cc.o
    In file included from /usr/local/src/mariadb/storage/xtradb/include/fts0priv.h:650:0,
                     from /usr/local/src/mariadb/storage/xtradb/fts/fts0config.cc:29:
    /usr/local/src/mariadb/storage/xtradb/include/fts0priv.ic:56:24: warning: invalid suffix on literal; C++11 requires a space between literal and string macro [-Wliteral-suffix]
        return(sprintf(str, "%016"PRIu64, id)););
                            ^
    /usr/local/src/mariadb/storage/xtradb/include/fts0priv.ic:69:23: warning: invalid suffix on literal; C++11 requires a space between literal and string macro [-Wliteral-suffix]
       return(sprintf(str, "%016"PRIu64, id));
                           ^
    [ 33%] Building CXX object storage/xtradb/CMakeFiles/xtradb.dir/fts/fts0pars.cc.o
    In file included from /usr/local/src/mariadb/storage/xtradb/include/fts0priv.h:650:0,
                     from /usr/local/src/mariadb/storage/xtradb/fts/fts0opt.cc:31:
    /usr/local/src/mariadb/storage/xtradb/include/fts0priv.ic:56:24: warning: invalid suffix on literal; C++11 requires a space between literal and string macro [-Wliteral-suffix]
        return(sprintf(str, "%016"PRIu64, id)););
                            ^
    /usr/local/src/mariadb/storage/xtradb/include/fts0priv.ic:69:23: warning: invalid suffix on literal; C++11 requires a space between literal and string macro [-Wliteral-suffix]
       return(sprintf(str, "%016"PRIu64, id));
                           ^
    [ 33%] Building CXX object storage/xtradb/CMakeFiles/xtradb.dir/fts/fts0que.cc.o
    In file included from /usr/local/src/mariadb/storage/xtradb/include/fts0priv.h:650:0,
                     from /usr/local/src/mariadb/storage/xtradb/fts/fts0que.cc:31:
    /usr/local/src/mariadb/storage/xtradb/include/fts0priv.ic:56:24: warning: invalid suffix on literal; C++11 requires a space between literal and string macro [-Wliteral-suffix]
        return(sprintf(str, "%016"PRIu64, id)););
                            ^
    /usr/local/src/mariadb/storage/xtradb/include/fts0priv.ic:69:23: warning: invalid suffix on literal; C++11 requires a space between literal and string macro [-Wliteral-suffix]
       return(sprintf(str, "%016"PRIu64, id));
                           ^
    [ 34%] Building CXX object storage/xtradb/CMakeFiles/xtradb.dir/fts/fts0sql.cc.o
    In file included from /usr/local/src/mariadb/storage/xtradb/include/fts0priv.h:650:0,
                     from /usr/local/src/mariadb/storage/xtradb/fts/fts0sql.cc:31:
    /usr/local/src/mariadb/storage/xtradb/include/fts0priv.ic:56:24: warning: invalid suffix on literal; C++11 requires a space between literal and string macro [-Wliteral-suffix]
        return(sprintf(str, "%016"PRIu64, id)););
                            ^
    /usr/local/src/mariadb/storage/xtradb/include/fts0priv.ic:69:23: warning: invalid suffix on literal; C++11 requires a space between literal and string macro [-Wliteral-suffix]
       return(sprintf(str, "%016"PRIu64, id));
                           ^
    [ 34%] Building CXX object storage/xtradb/CMakeFiles/xtradb.dir/fts/fts0tlex.cc.o
    [ 34%] Building CXX object storage/xtradb/CMakeFiles/xtradb.dir/handler/ha_innodb.cc.o
    [ 34%] Building CXX object storage/xtradb/CMakeFiles/xtradb.dir/handler/handler0alter.cc.o
    [ 34%] Building CXX object storage/xtradb/CMakeFiles/xtradb.dir/handler/i_s.cc.o
    In file included from /usr/local/src/mariadb/storage/xtradb/include/fts0priv.h:650:0,
                     from /usr/local/src/mariadb/storage/xtradb/handler/ha_innodb.cc:111:
    /usr/local/src/mariadb/storage/xtradb/include/fts0priv.ic:56:24: warning: invalid suffix on literal; C++11 requires a space between literal and string macro [-Wliteral-suffix]
        return(sprintf(str, "%016"PRIu64, id)););
                            ^
    /usr/local/src/mariadb/storage/xtradb/include/fts0priv.ic:69:23: warning: invalid suffix on literal; C++11 requires a space between literal and string macro [-Wliteral-suffix]
       return(sprintf(str, "%016"PRIu64, id));
                           ^
    In file included from /usr/local/src/mariadb/storage/xtradb/include/fts0priv.h:650:0,
                     from /usr/local/src/mariadb/storage/xtradb/handler/handler0alter.cc:50:
    /usr/local/src/mariadb/storage/xtradb/include/fts0priv.ic:56:24: warning: invalid suffix on literal; C++11 requires a space between literal and string macro [-Wliteral-suffix]
        return(sprintf(str, "%016"PRIu64, id)););
                            ^
    /usr/local/src/mariadb/storage/xtradb/include/fts0priv.ic:69:23: warning: invalid suffix on literal; C++11 requires a space between literal and string macro [-Wliteral-suffix]
       return(sprintf(str, "%016"PRIu64, id));
                           ^
    [ 34%] Building CXX object storage/xtradb/CMakeFiles/xtradb.dir/handler/xtradb_i_s.cc.o
    In file included from /usr/local/src/mariadb/storage/xtradb/include/fts0priv.h:650:0,
                     from /usr/local/src/mariadb/storage/xtradb/handler/i_s.cc:70:
    /usr/local/src/mariadb/storage/xtradb/include/fts0priv.ic:56:24: warning: invalid suffix on literal; C++11 requires a space between literal and string macro [-Wliteral-suffix]
        return(sprintf(str, "%016"PRIu64, id)););
                            ^
    /usr/local/src/mariadb/storage/xtradb/include/fts0priv.ic:69:23: warning: invalid suffix on literal; C++11 requires a space between literal and string macro [-Wliteral-suffix]
       return(sprintf(str, "%016"PRIu64, id));
                           ^
    [ 34%] Building CXX object storage/xtradb/CMakeFiles/xtradb.dir/ibuf/ibuf0ibuf.cc.o
    In file included from /usr/local/src/mariadb/sql/item.h:4500:0,
                     from /usr/local/src/mariadb/sql/sql_lex.h:26,
                     from /usr/local/src/mariadb/sql/sql_class.h:495,
                     from /usr/local/src/mariadb/sql/sql_acl.h:21,
                     from /usr/local/src/mariadb/storage/xtradb/handler/ha_innodb.cc:42:
    /usr/local/src/mariadb/sql/item_func.h: In member function ‘double Item_func::check_float_overflow(double)’:
    /usr/local/src/mariadb/sql/item_func.h:235:26: error: ‘isfinite’ was not declared in this scope
         return isfinite(value) ? value : raise_float_overflow();
                              ^
    /usr/local/src/mariadb/sql/item_func.h:235:26: note: suggested alternative:
    In file included from /usr/include/c++/5/random:38:0,
                     from /usr/include/c++/5/bits/stl_algo.h:66,
                     from /usr/include/c++/5/algorithm:62,
                     from /usr/local/src/mariadb/sql/mdl.h:33,
                     from /usr/local/src/mariadb/sql/handler.h:35,
                     from /usr/local/src/mariadb/sql/log.h:20,
                     from /usr/local/src/mariadb/sql/sql_class.h:27,
                     from /usr/local/src/mariadb/sql/sql_acl.h:21,
                     from /usr/local/src/mariadb/storage/xtradb/handler/ha_innodb.cc:42:
    /usr/include/c++/5/cmath:601:5: note:   ‘std::isfinite’
         isfinite(_Tp __x)
         ^
    In file included from /usr/local/src/mariadb/sql/item.h:4500:0,
                     from /usr/local/src/mariadb/storage/xtradb/handler/i_s.cc:31:
    /usr/local/src/mariadb/sql/item_func.h: In member function ‘double Item_func::check_float_overflow(double)’:
    /usr/local/src/mariadb/sql/item_func.h:235:26: error: ‘isfinite’ was not declared in this scope
         return isfinite(value) ? value : raise_float_overflow();
                              ^
    /usr/local/src/mariadb/sql/item_func.h:235:26: note: suggested alternative:
    In file included from /usr/include/c++/5/random:38:0,
                     from /usr/include/c++/5/bits/stl_algo.h:66,
                     from /usr/include/c++/5/algorithm:62,
                     from /usr/local/src/mariadb/sql/mdl.h:33,
                     from /usr/local/src/mariadb/sql/table.h:22,
                     from /usr/local/src/mariadb/sql/field.h:29,
                     from /usr/local/src/mariadb/sql/unireg.h:171,
                     from /usr/local/src/mariadb/sql/item.h:26,
                     from /usr/local/src/mariadb/storage/xtradb/handler/i_s.cc:31:
    /usr/include/c++/5/cmath:601:5: note:   ‘std::isfinite’
         isfinite(_Tp __x)
         ^
    [ 34%] Building CXX object storage/xtradb/CMakeFiles/xtradb.dir/lock/lock0iter.cc.o
    storage/xtradb/CMakeFiles/xtradb.dir/build.make:1190: recipe for target 'storage/xtradb/CMakeFiles/xtradb.dir/handler/ha_innodb.cc.o' failed
    make[2]: *** [storage/xtradb/CMakeFiles/xtradb.dir/handler/ha_innodb.cc.o] Error 1
    make[2]: *** Waiting for unfinished jobs....
    storage/xtradb/CMakeFiles/xtradb.dir/build.make:1238: recipe for target 'storage/xtradb/CMakeFiles/xtradb.dir/handler/i_s.cc.o' failed
    make[2]: *** [storage/xtradb/CMakeFiles/xtradb.dir/handler/i_s.cc.o] Error 1
    CMakeFiles/Makefile2:542: recipe for target 'storage/xtradb/CMakeFiles/xtradb.dir/all' failed
    make[1]: *** [storage/xtradb/CMakeFiles/xtradb.dir/all] Error 2
    Makefile:149: recipe for target 'all' failed
    make: *** [all] Error 2



 Comments   
Comment by Elena Stepanova [ 2016-02-10 ]

I didn't try, but based on MDEV-9308 I assume 5.5 and 10.0 are also affected, so I'm setting 'Fix version' to all of them.

Comment by pgnd [ 2016-02-10 ]

fyi cref:

Bug 59249 - Colliding isinf/isnan between C99 and C++11 with GCC >=4.6
https://bugs.webkit.org/show_bug.cgi?id=59249

Bug 320803 - isnan() and isinf() should be std::isnan() and std::isinf()
https://bugs.kde.org/show_bug.cgi?id=320803

Comment by Daniel Black [ 2017-02-17 ]

https://github.com/OpenLightingProject/ola/issues/1028#issuecomment-188922290

Seems like April 2017, the end of precise support, is the time to move from auto_ptr to uniq_ptr according to the above analysis

Generated at Thu Feb 08 07:35:20 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.