From c027553d95fa481e873d47186e761bddc6f12d92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Storsj=C3=B6?= Date: Fri, 19 Mar 2021 13:45:52 +0200 Subject: [PATCH] [cmake] Disable GCC 9's -Wpessimizing-move Similar to the existing code for disabling GCC's -Wredudant-move, also check for the -Wpessimizing-move option and disable it if possible. This silences another bunch of noisy warnings when building LLVM with GCC 9. As noted for -Wredundant-move, the code can't be fixed to silence the warnings while retaining support for older compilers. Differential Revision: https://reviews.llvm.org/D98942 --- llvm/cmake/modules/HandleLLVMOptions.cmake | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/llvm/cmake/modules/HandleLLVMOptions.cmake b/llvm/cmake/modules/HandleLLVMOptions.cmake index 0c575b6608b0..8b64694757e9 100644 --- a/llvm/cmake/modules/HandleLLVMOptions.cmake +++ b/llvm/cmake/modules/HandleLLVMOptions.cmake @@ -690,14 +690,17 @@ if (LLVM_ENABLE_WARNINGS AND (LLVM_COMPILER_IS_GCC_COMPATIBLE OR CLANG_CL)) check_cxx_compiler_flag("-Wclass-memaccess" CXX_SUPPORTS_CLASS_MEMACCESS_FLAG) append_if(CXX_SUPPORTS_CLASS_MEMACCESS_FLAG "-Wno-class-memaccess" CMAKE_CXX_FLAGS) - # Disable -Wredundant-move on GCC>=9. GCC wants to remove std::move in code - # like "A foo(ConvertibleToA a) { return std::move(a); }", but this code does - # not compile (or uses the copy constructor instead) on clang<=3.8. Clang also - # has a -Wredundant-move, but it only fires when the types match exactly, so - # we can keep it here. + # Disable -Wredundant-move and -Wpessimizing-move on GCC>=9. GCC wants to + # remove std::move in code like "A foo(ConvertibleToA a) { + # return std::move(a); }", but this code does not compile (or uses the copy + # constructor instead) on clang<=3.8. Clang also has a -Wredundant-move and + # -Wpessimizing-move, but they only fire when the types match exactly, so we + # can keep them here. if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") check_cxx_compiler_flag("-Wredundant-move" CXX_SUPPORTS_REDUNDANT_MOVE_FLAG) append_if(CXX_SUPPORTS_REDUNDANT_MOVE_FLAG "-Wno-redundant-move" CMAKE_CXX_FLAGS) + check_cxx_compiler_flag("-Wpessimizing-move" CXX_SUPPORTS_PESSIMIZING_MOVE_FLAG) + append_if(CXX_SUPPORTS_PESSIMIZING_MOVE_FLAG "-Wno-pessimizing-move" CMAKE_CXX_FLAGS) endif() # The LLVM libraries have no stable C++ API, so -Wnoexcept-type is not useful.