Forward declare special case lists
authorReid Kleckner <rnk@google.com>
Thu, 27 Feb 2020 01:24:52 +0000 (17:24 -0800)
committerReid Kleckner <rnk@google.com>
Thu, 27 Feb 2020 18:05:30 +0000 (10:05 -0800)
This avoids pulling in unordered_map from TrigramIndex.h:

$ diff -u thedeps-before.txt thedeps-after.txt | \
        grep '^[-+] ' | sort | uniq -c | sort -nr
    976 -    ../llvm/include/llvm/Support/TrigramIndex.h
    976 -    ../llvm/include/llvm/Support/SpecialCaseList.h
    976 -    ../clang/include/clang/Basic/SanitizerSpecialCaseList.h
    502 -    ../../../PROGRA~2/MIB055~1/2019/PROFES~1/VC/Tools/MSVC/14.24.28314/include/unordered_map
    467 -    ../../../PROGRA~2/MIB055~1/2019/PROFES~1/VC/Tools/MSVC/14.24.28314/include/xhash
    467 -    ../../../PROGRA~2/MIB055~1/2019/PROFES~1/VC/Tools/MSVC/14.24.28314/include/xbit_ops.h
    212 -    ../llvm/include/llvm/ADT/StringSet.h

clang/include/clang/Basic/SanitizerBlacklist.h
clang/include/clang/Basic/SanitizerSpecialCaseList.h
clang/include/clang/Basic/XRayLists.h
clang/include/clang/Tooling/DependencyScanning/ModuleDepCollector.h
clang/lib/Basic/SanitizerBlacklist.cpp
clang/lib/Basic/XRayLists.cpp
clang/lib/Sema/SemaDecl.cpp

index 29af28b..c874ff2 100644 (file)
 #define LLVM_CLANG_BASIC_SANITIZERBLACKLIST_H
 
 #include "clang/Basic/LLVM.h"
-#include "clang/Basic/SanitizerSpecialCaseList.h"
-#include "clang/Basic/Sanitizers.h"
 #include "clang/Basic/SourceLocation.h"
-#include "clang/Basic/SourceManager.h"
 #include "llvm/ADT/StringRef.h"
 #include <memory>
+#include <vector>
 
 namespace clang {
 
+class SanitizerMask;
+class SourceManager;
+class SanitizerSpecialCaseList;
+
 class SanitizerBlacklist {
   std::unique_ptr<SanitizerSpecialCaseList> SSCL;
   SourceManager &SM;
@@ -30,6 +32,7 @@ class SanitizerBlacklist {
 public:
   SanitizerBlacklist(const std::vector<std::string> &BlacklistPaths,
                      SourceManager &SM);
+  ~SanitizerBlacklist();
   bool isBlacklistedGlobal(SanitizerMask Mask, StringRef GlobalName,
                            StringRef Category = StringRef()) const;
   bool isBlacklistedType(SanitizerMask Mask, StringRef MangledTypeName,
index 88d31a6..c84894d 100644 (file)
@@ -10,6 +10,7 @@
 // SanitizerMask.
 //
 //===----------------------------------------------------------------------===//
+
 #ifndef LLVM_CLANG_BASIC_SANITIZERSPECIALCASELIST_H
 #define LLVM_CLANG_BASIC_SANITIZERSPECIALCASELIST_H
 
 #include "clang/Basic/Sanitizers.h"
 #include "llvm/ADT/StringRef.h"
 #include "llvm/Support/SpecialCaseList.h"
-#include "llvm/Support/VirtualFileSystem.h"
 #include <memory>
+#include <vector>
+
+namespace llvm {
+namespace vfs {
+class FileSystem;
+}
+} // namespace llvm
 
 namespace clang {
 
index cf464f9..7ea9d97 100644 (file)
 
 #include "clang/Basic/LLVM.h"
 #include "clang/Basic/SourceLocation.h"
-#include "clang/Basic/SourceManager.h"
 #include "llvm/ADT/ArrayRef.h"
 #include "llvm/ADT/StringRef.h"
-#include "llvm/Support/SpecialCaseList.h"
 #include <memory>
 
+namespace llvm {
+class SpecialCaseList;
+}
+
 namespace clang {
 
+class SourceManager;
+
 class XRayFunctionFilter {
   std::unique_ptr<llvm::SpecialCaseList> AlwaysInstrument;
   std::unique_ptr<llvm::SpecialCaseList> NeverInstrument;
@@ -32,6 +36,7 @@ public:
   XRayFunctionFilter(ArrayRef<std::string> AlwaysInstrumentPaths,
                      ArrayRef<std::string> NeverInstrumentPaths,
                      ArrayRef<std::string> AttrListPaths, SourceManager &SM);
+  ~XRayFunctionFilter();
 
   enum class ImbueAttribute {
     NONE,
index c5d12fc..c490bb3 100644 (file)
@@ -19,8 +19,8 @@
 #include "llvm/ADT/DenseMap.h"
 #include "llvm/ADT/StringSet.h"
 #include "llvm/Support/raw_ostream.h"
-
 #include <string>
+#include <unordered_map>
 
 namespace clang {
 namespace tooling {
index 4f71349..48cc229 100644 (file)
 // sanitizers.
 //
 //===----------------------------------------------------------------------===//
+
 #include "clang/Basic/SanitizerBlacklist.h"
+#include "clang/Basic/SanitizerSpecialCaseList.h"
+#include "clang/Basic/Sanitizers.h"
+#include "clang/Basic/SourceManager.h"
 
 using namespace clang;
 
@@ -20,6 +24,8 @@ SanitizerBlacklist::SanitizerBlacklist(
           BlacklistPaths, SM.getFileManager().getVirtualFileSystem())),
       SM(SM) {}
 
+SanitizerBlacklist::~SanitizerBlacklist() = default;
+
 bool SanitizerBlacklist::isBlacklistedGlobal(SanitizerMask Mask,
                                              StringRef GlobalName,
                                              StringRef Category) const {
index 222a28f..f9827be 100644 (file)
@@ -9,7 +9,10 @@
 // User-provided filters for always/never XRay instrumenting certain functions.
 //
 //===----------------------------------------------------------------------===//
+
 #include "clang/Basic/XRayLists.h"
+#include "clang/Basic/SourceManager.h"
+#include "llvm/Support/SpecialCaseList.h"
 
 using namespace clang;
 
@@ -25,6 +28,8 @@ XRayFunctionFilter::XRayFunctionFilter(
           AttrListPaths, SM.getFileManager().getVirtualFileSystem())),
       SM(SM) {}
 
+XRayFunctionFilter::~XRayFunctionFilter() = default;
+
 XRayFunctionFilter::ImbueAttribute
 XRayFunctionFilter::shouldImbueFunction(StringRef FunctionName) const {
   // First apply the always instrument list, than if it isn't an "always" see
index 7fe3213..ffe620b 100644 (file)
@@ -47,6 +47,7 @@
 #include <algorithm>
 #include <cstring>
 #include <functional>
+#include <unordered_map>
 
 using namespace clang;
 using namespace sema;
@@ -17570,9 +17571,11 @@ static void CheckForDuplicateEnumValues(Sema &S, ArrayRef<Decl *> Elements,
   typedef SmallVector<std::unique_ptr<ECDVector>, 3> DuplicatesVector;
 
   typedef llvm::PointerUnion<EnumConstantDecl*, ECDVector*> DeclOrVector;
+
+  // DenseMaps cannot contain the all ones int64_t value, so use unordered_map.
   typedef std::unordered_map<int64_t, DeclOrVector> ValueToVectorMap;
 
-  // Use int64_t as a key to avoid needing special handling for DenseMap keys.
+  // Use int64_t as a key to avoid needing special handling for map keys.
   auto EnumConstantToKey = [](const EnumConstantDecl *D) {
     llvm::APSInt Val = D->getInitVal();
     return Val.isSigned() ? Val.getSExtValue() : Val.getZExtValue();