| Bug #87956 | row0sel.cc:5178:32 error: ISO C++ forbids comparison between pointer and intege | ||
|---|---|---|---|
| Submitted: | 3 Oct 2017 16:12 | Modified: | 5 Oct 2017 13:15 | 
| Reporter: | Melanie Blower | Email Updates: | |
| Status: | Closed | Impact on me: | |
| Category: | MySQL Server: Compiling | Severity: | S3 (Non-critical) | 
| Version: | 5.7.19 | OS: | Red Hat | 
| Assigned to: | CPU Architecture: | Any | |
   [4 Oct 2017 7:45]
   MySQL Verification Team        
  Hello Melanie Blower, Thank you for the report and feedback! Thanks, Umesh
   [4 Oct 2017 10:26]
   Tor Didriksen        
  You get this warning because gcc7 defaults to -std=C++14 which is *not*
supported for Mysql5.7
cmake/build_configurations/compiler_options.cmake contains:
    # GCC 6 has C++14 as default, set it explicitly to the old default.
    EXECUTE_PROCESS(COMMAND ${CMAKE_CXX_COMPILER} -dumpversion
                    OUTPUT_VARIABLE GXX_VERSION)
    IF(GXX_VERSION VERSION_EQUAL 6.0 OR GXX_VERSION VERSION_GREATER 6.0)
      SET(COMMON_CXX_FLAGS             "${COMMON_CXX_FLAGS} -std=gnu++03")
    ENDIF()
Use this, and your warning disappears.
In general you can not expect older/GA versions of MySQL to have a clean
build with new compilers. For the current development versions we *do* fix
build problems (currently working with warnings from gcc8) We occasionally
backport such fixes to GA versions.
 
   [5 Oct 2017 13:15]
   Paul DuBois        
  Posted by developer: Fixed in 5.7.21, 8.0.4, 9.0.0. Code cleanup. No changelog entry needed.


Description: Hello, I work at Intel on the Intel C++ compiler and we compile MySQL with various compilers including gcc and clang. We are finding an error reported on this line. The field is treated as though it were Boolean, but the type is int*. Will you please correct the usage? Thanks and regards Here's the report from gcc7, .../mblower/_test/mysql-5.7.19/storage/innobase/row/row0sel.cc: In function ‘dberr_t row_search_mvcc(unsigned char*, page_cur_mode_t, row_prebuilt_t*, ulint, ulint)’: /export/ics1/mblower/_test/mysql-5.7.19/storage/innobase/row/row0sel.cc:5178:32 error: ISO C++ forbids comparison between pointer and integer [-fpermissive] && prebuilt->idx_cond == false && end_loop >= 100) { ^~~~~ -bash-4.2$ which gcc .../gcc/7.2.0/rhel70/efi2/bin/gcc How to repeat: cd .../_test/mysql-5.7.19/storage/innobase Copied from the log file from building the package, this is the compile line which fails: g++ -DCOMPILER_HINTS -DHAVE_CONFIG_H -DHAVE_FALLOC_PUNCH_HOLE_AND_KEEP_SIZE=1 -DHAVE_IB_ATOMIC_PTHREAD_T_GCC=1 -DHAVE_IB_GCC_ATOMIC_COMPARE_EXCHANGE=1 -DHAVE_IB_GCC_ATOMIC_THREAD_FENCE=1 -DHAVE_IB_GCC_SYNC_SYNCHRONISE=1 -DHAVE_IB_LINUX_FUTEX=1 -DHAVE_LIBEVENT1 -DHAVE_LZ4=1 -DHAVE_NANOSLEEP=1 -DHAVE_SCHED_GETCPU=1 -DLINUX_NATIVE_AIO=1 -DMUTEX_EVENT -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -O2 -g -DNDEBUG -DDBUG_OFF -I.../_test/mysql-5.7.19/include -I.../_test/mysql-5.7.19/extra/rapidjson/include -I.../_test/mysql-5.7.19/libbinlogevents/include -I.../_test/mysql-5.7.19/libbinlogevents/export -I.../_test/mysql-5.7.19/extra/lz4 -I.../_test/mysql-5.7.19/storage/innobase/include -I.../_test/mysql-5.7.19/storage/innobase/handler -I.../_test/mysql-5.7.19/sql -I.../_test/mysql-5.7.19/sql/auth -I/.../_test/mysql-5.7.19/regex -I.../_test/mysql-5.7.19/extra/yassl/include -I.../_test/mysql-5.7.19/extra/yassl/taocrypt/include -I.../_test/mysql-5.7.19/zlib -DUNIV_LINUX -D_GNU_SOURCE=1 -c .../_test/mysql-5.7.19/storage/innobase/row/row0sel.cc Suggested fix: Compare == NULL rather than == false