From c63f2581f4f8ff9766b55410674f97245c51b7b4 Mon Sep 17 00:00:00 2001 From: David Blaikie <dblaikie@gmail.com> Date: Thu, 11 Aug 2022 21:55:44 +0000 Subject: [PATCH] Enable -Wctad-maybe-unsupported in LLVM build Warns on potentially unintended use of C++17 Class Template Argument Deduction. Use of this feature with types that aren't intended to support it may may future refactorings of those types more difficult - so this warning fires whenever the feature is used with a type that may not have intended to be used with CTAD (the warning uses the existence of at least one explicit deduction guide to indicate that a type intentionally supports CTAD - absent that, it's assumed to not be intended to support CTAD & produces a warning). This is disabled in libcxx because lots of the standard library is assumed to provide ctad-usable APIs and the false positive suppression in the diagnostic is based on system header classification which doesn't apply in the libcxx build itself. Differential Revision: https://reviews.llvm.org/D131727 --- libcxx/CMakeLists.txt | 1 + llvm/cmake/modules/HandleLLVMOptions.cmake | 3 +++ llvm/include/llvm/CodeGen/RDFGraph.h | 2 ++ 3 files changed, 6 insertions(+) diff --git a/libcxx/CMakeLists.txt b/libcxx/CMakeLists.txt index bbc9005274ff..aeaf6b062472 100644 --- a/libcxx/CMakeLists.txt +++ b/libcxx/CMakeLists.txt @@ -592,6 +592,7 @@ function(cxx_add_warning_flags target) -Wno-user-defined-literals -Wno-covered-switch-default -Wno-suggest-override + -Wno-ctad-maybe-unsupported ) if (LIBCXX_TARGETING_CLANG_CL) target_add_compile_flags_if_supported(${target} PRIVATE diff --git a/llvm/cmake/modules/HandleLLVMOptions.cmake b/llvm/cmake/modules/HandleLLVMOptions.cmake index 151bab84a7a8..37a260797a44 100644 --- a/llvm/cmake/modules/HandleLLVMOptions.cmake +++ b/llvm/cmake/modules/HandleLLVMOptions.cmake @@ -794,6 +794,9 @@ if (LLVM_ENABLE_WARNINGS AND (LLVM_COMPILER_IS_GCC_COMPATIBLE OR CLANG_CL)) # Prevent bugs that can happen with llvm's brace style. add_flag_if_supported("-Wmisleading-indentation" MISLEADING_INDENTATION_FLAG) + + # Enable -Wctad-maybe-unsupported to catch unintended use of CTAD. + add_flag_if_supported("-Wctad-maybe-unsupported" CTAD_MAYBE_UNSPPORTED_FLAG) endif (LLVM_ENABLE_WARNINGS AND (LLVM_COMPILER_IS_GCC_COMPATIBLE OR CLANG_CL)) if (LLVM_COMPILER_IS_GCC_COMPATIBLE AND NOT LLVM_ENABLE_WARNINGS) diff --git a/llvm/include/llvm/CodeGen/RDFGraph.h b/llvm/include/llvm/CodeGen/RDFGraph.h index 4a8428fce20a..43eb051c136b 100644 --- a/llvm/include/llvm/CodeGen/RDFGraph.h +++ b/llvm/include/llvm/CodeGen/RDFGraph.h @@ -934,6 +934,8 @@ namespace rdf { const DataFlowGraph &G; }; + template <typename T> Print(const T &, const DataFlowGraph &) -> Print<T>; + template <typename T> struct PrintNode : Print<NodeAddr<T>> { PrintNode(const NodeAddr<T> &x, const DataFlowGraph &g)