Browse Source

IWYU: Fix workaround mapping for std::hash

It is provided by `functional`, not `utility`.  Fix the mapping added by
commit 276d3c7afe (IWYU: Add workaround mapping for std::hash,
2018-07-31).  Also generalize the workaround from commit v3.12.0-rc1~39^2~1
(IWYU: Define a macro to tell code it is preprocessing for iwyu,
2018-05-25) to allow local builds to configure specific flags.  This
is needed because iwyu behaves differently in different environments.
Brad King 7 years ago
parent
commit
aefb8559dc
4 changed files with 5 additions and 6 deletions
  1. 2 1
      CMakeLists.txt
  2. 2 3
      Source/cmFindPackageCommand.h
  3. 0 1
      Source/cmServerProtocol.cxx
  4. 1 1
      Utilities/IWYU/mapping.imp

+ 2 - 1
CMakeLists.txt

@@ -285,7 +285,8 @@ if(CMake_RUN_IWYU)
     message(FATAL_ERROR "CMake_RUN_IWYU is ON but include-what-you-use is not found!")
   endif()
   set(CMAKE_CXX_INCLUDE_WHAT_YOU_USE
-    "${IWYU_COMMAND};-Xiwyu;--mapping_file=${CMake_SOURCE_DIR}/Utilities/IWYU/mapping.imp;-w;-DCMAKE_IWYU")
+    "${IWYU_COMMAND};-Xiwyu;--mapping_file=${CMake_SOURCE_DIR}/Utilities/IWYU/mapping.imp;-w")
+  list(APPEND CMAKE_CXX_INCLUDE_WHAT_YOU_USE ${CMake_IWYU_OPTIONS})
 endif()
 
 

+ 2 - 3
Source/cmFindPackageCommand.h

@@ -7,6 +7,7 @@
 
 #include "cm_kwiml.h"
 #include <cstddef>
+#include <functional>
 #include <map>
 #include <set>
 #include <string>
@@ -15,14 +16,12 @@
 // IWYU insists we should forward-declare instead of including <functional>,
 // but we cannot forward-declare reliably because some C++ standard libraries
 // put the template in an inline namespace.
-#ifdef CMAKE_IWYU
+#ifdef CMAKE_IWYU_FORWARD_STD_HASH
 /* clang-format off */
 namespace std {
   template <class T> struct hash;
 }
 /* clang-format on */
-#else
-#  include <functional>
 #endif
 
 #include "cmFindCommon.h"

+ 0 - 1
Source/cmServerProtocol.cxx

@@ -37,7 +37,6 @@
 #include <set>
 #include <string>
 #include <unordered_map>
-#include <utility>
 #include <vector>
 
 // Get rid of some windows macros:

+ 1 - 1
Utilities/IWYU/mapping.imp

@@ -53,7 +53,7 @@
   #{ symbol: [ "std::pair", private, "<set>", public ] },
 
   # HACK: iwyu wrongly thinks that <system_error> is needed for std::hash
-  { symbol: [ "std::hash", private, "<utility>", public ] },
+  { symbol: [ "std::hash", private, "<functional>", public ] },
 
   # __decay_and_strip is used internally in the C++11 standard library.
   # IWYU does not classify it as internal and suggests to add <type_traits>.