diff --git a/components/mysqlbackup/backup_page_tracker.h b/components/mysqlbackup/backup_page_tracker.h index a0898a251f84..1d072a5104d3 100644 --- a/components/mysqlbackup/backup_page_tracker.h +++ b/components/mysqlbackup/backup_page_tracker.h @@ -28,6 +28,7 @@ #include +#include // size_t #include #include "mysqlbackup.h" diff --git a/extra/robin-hood-hashing/robin_hood.h b/extra/robin-hood-hashing/robin_hood.h index 34ba81bf8736..596f123beb98 100644 --- a/extra/robin-hood-hashing/robin_hood.h +++ b/extra/robin-hood-hashing/robin_hood.h @@ -43,6 +43,7 @@ #include #include #include +#include // std::numeric_limits #include // only to support hash of smart pointers #include #include diff --git a/include/my_alloc.h b/include/my_alloc.h index a1bd1f278abb..942f3cf0786f 100644 --- a/include/my_alloc.h +++ b/include/my_alloc.h @@ -32,6 +32,7 @@ #include +#include // std::uintptr_t #include #include #include diff --git a/include/mysql/components/services/page_track_service.h b/include/mysql/components/services/page_track_service.h index 103b51351868..3090daa332cc 100644 --- a/include/mysql/components/services/page_track_service.h +++ b/include/mysql/components/services/page_track_service.h @@ -27,6 +27,7 @@ #include #include +#include // size_t #include #ifdef __cplusplus diff --git a/mysys/thr_lock.cc b/mysys/thr_lock.cc index 404e32024ed3..662f34086d68 100644 --- a/mysys/thr_lock.cc +++ b/mysys/thr_lock.cc @@ -1198,6 +1198,7 @@ static void *test_thread(void *arg) { THR_LOCK_DATA *multi_locks[MAX_LOCK_COUNT]; my_thread_id id; mysql_cond_t COND_thr_lock; + memset(&COND_thr_lock, 0, sizeof(COND_thr_lock)); id = param + 1; /* Main thread uses value 0. */ mysql_cond_init(0, &COND_thr_lock); diff --git a/router/src/harness/src/stdx/filesystem.cc b/router/src/harness/src/stdx/filesystem.cc index d800d4635379..d1f352a6f210 100644 --- a/router/src/harness/src/stdx/filesystem.cc +++ b/router/src/harness/src/stdx/filesystem.cc @@ -92,7 +92,7 @@ stdx::expected getcwd() { return stdx::make_unexpected(last_posix_error_code()); } #else - std::array cwd; + std::array cwd{}; if (nullptr == ::getcwd(cwd.data(), cwd.size())) { return stdx::make_unexpected(last_error_code()); } diff --git a/router/src/harness/tests/plugins/lifecycle.cc b/router/src/harness/tests/plugins/lifecycle.cc index 115b05804ecc..d2760d4c3422 100644 --- a/router/src/harness/tests/plugins/lifecycle.cc +++ b/router/src/harness/tests/plugins/lifecycle.cc @@ -195,7 +195,7 @@ void init_exit_strategies(const mysql_harness::ConfigSection *section) { // clang-format on // process configuration - for (const std::string &func : {"init", "start", "stop", "deinit"}) { + for (const std::string func : {"init", "start", "stop", "deinit"}) { if (section->has(func)) { const std::string &line = section->get(func); @@ -449,7 +449,7 @@ LIFECYCLE_API void lifecycle_init(int flags) { std::lock_guard lock(g_strategies_mtx); g_strategies.clear(); - for (const std::string &key : {"instance1", "instance2", "instance3"}) { + for (const std::string key : {"instance1", "instance2", "instance3"}) { g_strategies[key].strategy_set = false; // optimisation, } // doesn't affect behavior } diff --git a/router/src/harness/tests/test_net_ts_impl_resolver.cc b/router/src/harness/tests/test_net_ts_impl_resolver.cc index 3f28f2688e43..e5007b21671e 100644 --- a/router/src/harness/tests/test_net_ts_impl_resolver.cc +++ b/router/src/harness/tests/test_net_ts_impl_resolver.cc @@ -80,15 +80,15 @@ TEST(NetTS_impl_resolver, gethostname_buffer_too_short) { } TEST(NetTS_impl_resolver, gethostname) { - std::array name; + std::array name{}; const auto res = net::impl::resolver::gethostname(name.data(), name.size()); EXPECT_THAT(res, ::testing::Truly([](auto v) { return bool(v); })); } TEST(NetTS_impl_resolver, getnameinfo) { - std::array name; - std::array serv; + std::array name{}; + std::array serv{}; struct sockaddr_in saddr {}; saddr.sin_family = AF_INET; @@ -101,8 +101,8 @@ TEST(NetTS_impl_resolver, getnameinfo) { } TEST(NetTS_impl_resolver, getnameinfo_invalid_sockaddr_size) { - std::array name; - std::array serv; + std::array name{}; + std::array serv{}; struct sockaddr_in saddr {}; saddr.sin_family = AF_INET; @@ -132,8 +132,8 @@ TEST(NetTS_impl_resolver, getnameinfo_invalid_sockaddr_size) { // windows doesn't check for bad-flags, but returns ERROR_INSUFFICIENT_BUFFER // freebsd, macosx doesn't check for bad-flags, but returns EAI_NONAME TEST(NetTS_impl_resolver, getnameinfo_badflags) { - std::array name; - std::array serv; + std::array name{}; + std::array serv{}; struct sockaddr_in saddr {}; saddr.sin_family = AF_INET; @@ -150,7 +150,7 @@ TEST(NetTS_impl_resolver, getnameinfo_badflags) { #endif TEST(NetTS_impl_resolver, getnameinfo_overflow) { - std::array name; // buffer too small to resolve the address + std::array name{}; // buffer too small to resolve the address struct sockaddr_in saddr {}; saddr.sin_family = AF_INET; @@ -295,7 +295,7 @@ TEST(NetTS_impl_resolver, inetntop_nospace) { saddr.sin_family = AF_INET; - std::array name; + std::array name{}; const auto res = net::impl::resolver::inetntop(AF_INET, &saddr, name.data(), name.size()); @@ -319,7 +319,7 @@ TEST(NetTS_impl_resolver, inetntop_nospace) { TEST(NetTS_impl_resolver, inetntop_ipv4) { struct in_addr addr {}; - std::array name; + std::array name{}; const auto res = net::impl::resolver::inetntop(AF_INET, &addr, name.data(), name.size()); @@ -331,7 +331,7 @@ TEST(NetTS_impl_resolver, inetntop_ipv4) { TEST(NetTS_impl_resolver, inetntop_ipv6) { struct in6_addr addr {}; - std::array name; + std::array name{}; const auto res = net::impl::resolver::inetntop(AF_INET6, &addr, name.data(), name.size()); @@ -343,7 +343,7 @@ TEST(NetTS_impl_resolver, inetntop_ipv6) { TEST(NetTS_impl_resolver, inetntop_fail_invalid_protocol) { struct in6_addr addr {}; - std::array name; + std::array name{}; const auto res = net::impl::resolver::inetntop(AF_UNIX, &addr, name.data(), name.size()); @@ -355,7 +355,7 @@ TEST(NetTS_impl_resolver, inetntop_fail_invalid_protocol) { TEST(NetTS_impl_resolver, inetntop_fail_empty_buffer) { struct in6_addr addr {}; - std::array name; + std::array name{}; const auto res = net::impl::resolver::inetntop(AF_INET6, &addr, name.data(), 0); diff --git a/router/tests/component/test_bootstrap_account.cc b/router/tests/component/test_bootstrap_account.cc index c475e1429f97..ee57ecddfde3 100644 --- a/router/tests/component/test_bootstrap_account.cc +++ b/router/tests/component/test_bootstrap_account.cc @@ -3971,7 +3971,7 @@ TEST_F(UndoCreateUserTest, failure_after_account_creation) { // induce failure at config-write step (should result in error analogous to: // "Could not create file '.../router-sBHJGw/mysqlrouter.conf.bak': Permission // denied" - for (const std::string &file : {"mysqlrouter.conf", "mysqlrouter.conf.bak"}) { + for (const std::string file : {"mysqlrouter.conf", "mysqlrouter.conf.bak"}) { std::string path = bootstrap_directory.name() + "/" + file; std::ofstream f(path.c_str()); f << "[DEFAULT]\n"; @@ -4082,7 +4082,7 @@ TEST_F(UndoCreateUserTest, // induce failure at config-write step (should result in error analogous to: // "Could not create file '.../router-sBHJGw/mysqlrouter.conf.bak': Permission // denied" - for (const std::string &file : {"mysqlrouter.conf", "mysqlrouter.conf.bak"}) { + for (const std::string file : {"mysqlrouter.conf", "mysqlrouter.conf.bak"}) { std::string path = bootstrap_directory.name() + "/" + file; std::ofstream f(path.c_str()); f << "[DEFAULT]\n"; diff --git a/sql-common/sql_string.cc b/sql-common/sql_string.cc index 40435729421f..44511304e80f 100644 --- a/sql-common/sql_string.cc +++ b/sql-common/sql_string.cc @@ -23,6 +23,7 @@ #include "sql_string.h" #include +#include // std::numeric_limits #include "my_dbug.h" #include "my_macros.h" diff --git a/sql/CMakeLists.txt b/sql/CMakeLists.txt index 27dfdd8c825a..30590fb9cc64 100644 --- a/sql/CMakeLists.txt +++ b/sql/CMakeLists.txt @@ -870,6 +870,13 @@ IF(SOLARIS AND MY_COMPILER_IS_GNU AND ) ENDIF() +# Suppress warnings for gcc-11 or newer +IF(CMAKE_COMPILER_IS_GNUCXX AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 11) + ADD_CXX_COMPILE_FLAGS_TO_FILES(-Wno-mismatched-new-delete FILES sql_cursor.cc sql_prepare.cc) + # a false positive with a bison-generated file (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98753) + ADD_CXX_COMPILE_FLAGS_TO_FILES(-Wno-free-nonheap-object FILES ${CMAKE_CURRENT_BINARY_DIR}/sql_hints.yy.cc) +ENDIF() + ADD_LIBRARY(sql_dd STATIC ${DD_SOURCES}) ADD_DEPENDENCIES(sql_dd GenFixPrivs) ADD_DEPENDENCIES(sql_dd GenServerSource) diff --git a/sql/item_geofunc_internal.cc b/sql/item_geofunc_internal.cc index 29384b48edd9..de426d3789ce 100644 --- a/sql/item_geofunc_internal.cc +++ b/sql/item_geofunc_internal.cc @@ -111,8 +111,7 @@ template void BG_geometry_collection::merge_components(bool *pnull_value) { if (is_comp_no_overlapped()) return; - POS pos; - Item_func_st_union ifsu(pos, nullptr, nullptr); + Item_func_st_union ifsu(POS(), nullptr, nullptr); bool do_again = true; uint32 last_composition[6] = {0}, num_unchanged_composition = 0; size_t last_num_geos = 0; diff --git a/sql/memory/unique_ptr.h b/sql/memory/unique_ptr.h index 7997834d6ec6..a30585008de0 100644 --- a/sql/memory/unique_ptr.h +++ b/sql/memory/unique_ptr.h @@ -28,6 +28,7 @@ #include #include #include +#include // std::numeric_limits #include #include #include diff --git a/sql/opt_range.cc b/sql/opt_range.cc index f1167ef9ef2f..0af19bc8cc15 100644 --- a/sql/opt_range.cc +++ b/sql/opt_range.cc @@ -15560,7 +15560,7 @@ static void append_range_all_keyparts(Opt_trace_array *range_trace, range_string and the string becomes too long. Printing very long range conditions normally doesn't make sense either. */ - if (!append_to_trace && range_string->length() > 500) { + if (!append_to_trace && range_string && range_string->length() > 500) { range_string->append(STRING_WITH_LEN("...")); break; } @@ -15608,7 +15608,7 @@ static void append_range_all_keyparts(Opt_trace_array *range_trace, */ if (append_to_trace) range_trace->add_utf8(range_so_far->ptr(), range_so_far->length()); - else { + else if (range_string) { if (range_string->length() == 0) range_string->append(STRING_WITH_LEN("(")); else diff --git a/sql/server_component/mysql_query_attributes_imp.cc b/sql/server_component/mysql_query_attributes_imp.cc index 14b2e65cb9c2..302d2016888a 100644 --- a/sql/server_component/mysql_query_attributes_imp.cc +++ b/sql/server_component/mysql_query_attributes_imp.cc @@ -274,7 +274,7 @@ static String *query_parameter_val_str(const PS_PARAM *param, str->length( my_TIME_to_str(tm, str->ptr(), uint8{DATETIME_MAX_DECIMALS})); } else { - delete str; + delete[] str; str = nullptr; } break; @@ -300,7 +300,7 @@ static String *query_parameter_val_str(const PS_PARAM *param, str->length( my_TIME_to_str(tm, str->ptr(), uint8{DATETIME_MAX_DECIMALS})); } else { - delete str; + delete[] str; str = nullptr; } break; @@ -342,7 +342,7 @@ static String *query_parameter_val_str(const PS_PARAM *param, str->length( my_TIME_to_str(tm, str->ptr(), uint8{DATETIME_MAX_DECIMALS})); } else { - delete str; + delete[] str; str = nullptr; } break; @@ -355,7 +355,7 @@ static String *query_parameter_val_str(const PS_PARAM *param, uint dummy_errors; if (str->copy(reinterpret_cast(param->value), param->length, &my_charset_bin, &my_charset_bin, &dummy_errors)) { - delete str; + delete[] str; str = nullptr; } break; @@ -368,7 +368,7 @@ static String *query_parameter_val_str(const PS_PARAM *param, uint dummy_errors; if (str->copy(reinterpret_cast(param->value), param->length, cs, cs, &dummy_errors)) { - delete str; + delete[] str; str = nullptr; } break; diff --git a/storage/innobase/CMakeLists.txt b/storage/innobase/CMakeLists.txt index b34a1bb97c8a..7cc7ad7e0f24 100644 --- a/storage/innobase/CMakeLists.txt +++ b/storage/innobase/CMakeLists.txt @@ -288,3 +288,10 @@ IF(HAS_WARN_FLAG) ADD_COMPILE_FLAGS(fts/fts0pars.cc COMPILE_FLAGS "${HAS_WARN_FLAG}") ENDIF() + +# Suppress warnings for gcc-11 or newer +IF(CMAKE_COMPILER_IS_GNUCXX AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 11) + ADD_CXX_COMPILE_FLAGS_TO_FILES(-Wno-maybe-uninitialized FILES os/os0file.cc) + # a false positive with a bison-generated file (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98753) + ADD_CXX_COMPILE_FLAGS_TO_FILES(-Wno-free-nonheap-object FILES pars/pars0grm.cc) +ENDIF() diff --git a/unittest/gunit/mock_create_field.h b/unittest/gunit/mock_create_field.h index 16c87540b8fa..d9caad5b4ed5 100644 --- a/unittest/gunit/mock_create_field.h +++ b/unittest/gunit/mock_create_field.h @@ -40,6 +40,7 @@ class Mock_create_field : public Create_field { */ DBUG_ASSERT(field_type == MYSQL_TYPE_TIMESTAMP || field_type == MYSQL_TYPE_TIMESTAMP2); + memset(&m_lex_string, 0, sizeof(m_lex_string)); init(nullptr, // THD *thd nullptr, // char *fld_name field_type, diff --git a/unittest/gunit/strings_utf8-t.cc b/unittest/gunit/strings_utf8-t.cc index a863c7d1aa28..7e6e1b71b452 100644 --- a/unittest/gunit/strings_utf8-t.cc +++ b/unittest/gunit/strings_utf8-t.cc @@ -148,6 +148,7 @@ TEST_F(StringsUTF8Test, MyIsmbcharUtf8) { /* valid utf8 charaters, testing for boundry values */ utf8_src[0] = '\x00'; + utf8_src[1] = '\x00'; EXPECT_EQ(0U, system_charset_info->cset->ismbchar(system_charset_info, utf8_src, utf8_src + 1)); @@ -522,6 +523,7 @@ TEST_F(StringsUTF8mb4Test, MyIsmbcharUtf8mb4) { /* valid utf8mb4 charaters, testing for boundry values */ utf8_src[0] = '\x00'; + utf8_src[1] = '\x00'; EXPECT_EQ(0U, system_charset_info->cset->ismbchar(system_charset_info, utf8_src, utf8_src + 1)); utf8_src[0] = '\x7f';