From 7073b7cd6e04be5e442795e55b5e7e32de700666 Mon Sep 17 00:00:00 2001 From: Michael Tautschnig <tautschn@amazon.com> Date: Fri, 17 Nov 2023 17:09:41 +0000 Subject: [PATCH] Make -Wno-maybe-uninitialized the default with GCC With our use of optionalt/std::optional, these warnings pop up in an unpredictable manner. See https://gcc.gnu.org/bugzilla/buglist.cgi?quicksearch=std%3A%3Aoptional for a number of bug reports against GCC about this. --- CMakeLists.txt | 4 +++- src/config.inc | 3 ++- src/goto-instrument/unwindset.cpp | 18 ------------------ src/util/cmdline.cpp | 6 ------ src/util/lower_byte_operators.cpp | 7 ------- src/util/simplify_expr_int.cpp | 7 ------- 6 files changed, 5 insertions(+), 40 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 436257c44a44..80be9fad89ca 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -79,7 +79,9 @@ if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR set(CMAKE_CXX_FLAGS_RELEASE "-O2") set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g") # Enable lots of warnings - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wpedantic -Werror -Wno-deprecated-declarations -Wswitch-enum") + set(CMAKE_CXX_FLAGS + "${CMAKE_CXX_FLAGS} -Wall -Wpedantic -Werror -Wswitch-enum" + " -Wno-deprecated-declarations -Wno-maybe-uninitialized") elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") # This would be the place to enable warnings for Windows builds, although # config.inc doesn't seem to do that currently diff --git a/src/config.inc b/src/config.inc index d83f625abdf4..ce14bbd8d6c4 100644 --- a/src/config.inc +++ b/src/config.inc @@ -5,7 +5,8 @@ BUILD_ENV = AUTO ifeq ($(BUILD_ENV),MSVC) #CXXFLAGS += /Wall /WX else - CXXFLAGS += -Wall -pedantic -Werror -Wno-deprecated-declarations -Wswitch-enum + CXXFLAGS += -Wall -pedantic -Werror -Wswitch-enum + CXXFLAGS += -Wno-deprecated-declarations -Wno-maybe-uninitialized endif ifeq ($(CPROVER_WITH_PROFILING),1) diff --git a/src/goto-instrument/unwindset.cpp b/src/goto-instrument/unwindset.cpp index 0905945c8e43..d15822489cb4 100644 --- a/src/goto-instrument/unwindset.cpp +++ b/src/goto-instrument/unwindset.cpp @@ -33,13 +33,7 @@ void unwindsett::parse_unwindset_one_loop( if(val.empty()) return; -// Work around spurious GCC 12 warning about thread_nr being uninitialised. -#pragma GCC diagnostic push -#ifndef __clang__ -# pragma GCC diagnostic ignored "-Wmaybe-uninitialized" -#endif optionalt<unsigned> thread_nr; -#pragma GCC diagnostic pop if(isdigit(val[0])) { auto c_pos = val.find(':'); @@ -160,13 +154,7 @@ void unwindsett::parse_unwindset_one_loop( return; } else -// Work around spurious GCC 12 warning about thread_nr being uninitialised. -#pragma GCC diagnostic push -#ifndef __clang__ -# pragma GCC diagnostic ignored "-Wmaybe-uninitialized" -#endif id = function_id + "." + std::to_string(*nr); -#pragma GCC diagnostic pop } } @@ -182,13 +170,7 @@ void unwindsett::parse_unwindset_one_loop( if(thread_nr.has_value()) { -// Work around spurious GCC 12 warning about thread_nr being uninitialised. -#pragma GCC diagnostic push -#ifndef __clang__ -# pragma GCC diagnostic ignored "-Wmaybe-uninitialized" -#endif thread_loop_map[std::pair<irep_idt, unsigned>(id, *thread_nr)] = uw; -#pragma GCC diagnostic pop } else { diff --git a/src/util/cmdline.cpp b/src/util/cmdline.cpp index fe9ee544680c..84530430ae1a 100644 --- a/src/util/cmdline.cpp +++ b/src/util/cmdline.cpp @@ -296,13 +296,7 @@ bool cmdlinet::parse_arguments(int argc, const char **argv) return true; } - // Work around spurious GCC 12 warning about optnr being uninitialised. -#pragma GCC diagnostic push -#ifndef __clang__ -# pragma GCC diagnostic ignored "-Wmaybe-uninitialized" -#endif options[*optnr].isset = true; -#pragma GCC diagnostic pop if(options[*optnr].hasval) { diff --git a/src/util/lower_byte_operators.cpp b/src/util/lower_byte_operators.cpp index 8f68f2f6ccc9..574f318726ec 100644 --- a/src/util/lower_byte_operators.cpp +++ b/src/util/lower_byte_operators.cpp @@ -1110,15 +1110,8 @@ static exprt lower_byte_extract_array_vector( if(num_elements.has_value()) { - exprt::operandst operands; - // Work around spurious GCC warning about num_elements being uninitialised. -#pragma GCC diagnostic push -#ifndef __clang__ -# pragma GCC diagnostic ignored "-Wmaybe-uninitialized" -#endif operands.reserve(*num_elements); for(std::size_t i = 0; i < *num_elements; ++i) -#pragma GCC diagnostic pop { plus_exprt new_offset( unpacked.offset(), diff --git a/src/util/simplify_expr_int.cpp b/src/util/simplify_expr_int.cpp index 5096db9a3bfe..3d132ca47fa3 100644 --- a/src/util/simplify_expr_int.cpp +++ b/src/util/simplify_expr_int.cpp @@ -159,12 +159,6 @@ static bool mul_expr( return true; } -// Work around spurious GCC 12 warning about c_sizeof_type being -// uninitialised in its destructor (!). -#pragma GCC diagnostic push -#ifndef __clang__ -# pragma GCC diagnostic ignored "-Wmaybe-uninitialized" -#endif simplify_exprt::resultt<> simplify_exprt::simplify_mult(const mult_exprt &expr) { // check to see if it is a number type @@ -276,7 +270,6 @@ simplify_exprt::resultt<> simplify_exprt::simplify_mult(const mult_exprt &expr) return std::move(tmp); } } -#pragma GCC diagnostic pop simplify_exprt::resultt<> simplify_exprt::simplify_div(const div_exprt &expr) {