diff --git a/CMakeLists.txt b/CMakeLists.txt index 124c624..6e3a3e3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -209,6 +209,11 @@ endforeach() # ----------------------------------------------------------------------------- +find_program(IWYU NAMES include-what-you-use iwyu REQUIRED) +set_property(TARGET factgen-exe PROPERTY CXX_INCLUDE_WHAT_YOU_USE ${IWYU}) + +# ----------------------------------------------------------------------------- + if(NOT (DEFINED CLANG_VERSION)) set(CLANG_VERSION ${LLVM_MAJOR_VERSION}) endif() diff --git a/FactGenerator/include/FactGenerator.hpp b/FactGenerator/include/FactGenerator.hpp index 62f66fd..bae56d6 100644 --- a/FactGenerator/include/FactGenerator.hpp +++ b/FactGenerator/include/FactGenerator.hpp @@ -1,32 +1,50 @@ #ifndef CSV_GENERATOR_H__ #define CSV_GENERATOR_H__ -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -#include "ContextSensitivity.hpp" -#include "Demangler.hpp" -#include "FactWriter.hpp" -#include "ForwardingFactWriter.hpp" -#include "RefmodeEngine.hpp" -#include "Signatures.hpp" -#include "predicate_groups.hpp" - +#include // for Optional +#include // IWYU pragma: keep + +#include // for hash +#include // for path +#include // for flyweight +#include // for unordered_map +#include // for unordered_set +#include // for map +#include // for regex +#include // for string, basic_string +#include // for tuple +#include // for vector + +#include "ContextSensitivity.hpp" // for ContextSensitivity +#include "Demangler.hpp" // for Demangler +#include "ForwardingFactWriter.hpp" // for ForwardingFactWriter +#include "RefmodeEngine.hpp" // for refmode_t, RefmodeEngine +#include "predicate_groups.hpp" // for pred_t + +// Forward declarations namespace cclyzer { -class FactGenerator; +class FactWriter; } +namespace llvm { +class Constant; +class ConstantArray; +class ConstantExpr; +class ConstantStruct; +class ConstantVector; +class DataLayout; +class Function; +class GlobalAlias; +class GlobalVariable; +class InlineAsm; +class Module; +class NamedMDNode; +class Type; +class Value; +} // namespace llvm + +namespace cclyzer { +class FactGenerator; // IWYU pragma: keep +} // namespace cclyzer class cclyzer::FactGenerator : private RefmodeEngine, private Demangler, diff --git a/FactGenerator/include/FactWriter.hpp b/FactGenerator/include/FactWriter.hpp index 270ef6f..ea76c99 100644 --- a/FactGenerator/include/FactWriter.hpp +++ b/FactGenerator/include/FactWriter.hpp @@ -1,16 +1,17 @@ #ifndef FACT_WRITER_H__ #define FACT_WRITER_H__ -#include -#include -#include +// IWYU pragma: no_include "boost/unordered/detail/implementation.hpp" +#include // for path +#include // for unordered_map +#include // for string -#include "RefmodeEngine.hpp" // TODO replace -#include "csv_writer.hpp" -#include "predicate.hpp" +#include "RefmodeEngine.hpp" // for refmode_t +#include "csv_writer.hpp" // for csv_writer +#include "predicate.hpp" // for Predicate namespace cclyzer { -class FactWriter; +class FactWriter; // IWYU pragma: keep } class cclyzer::FactWriter { diff --git a/FactGenerator/include/InstructionVisitor.hpp b/FactGenerator/include/InstructionVisitor.hpp index 73d9a92..0e85284 100644 --- a/FactGenerator/include/InstructionVisitor.hpp +++ b/FactGenerator/include/InstructionVisitor.hpp @@ -1,17 +1,25 @@ #ifndef INSTR_VISITOR_H__ #define INSTR_VISITOR_H__ -#include - -#include - -#include "FactGenerator.hpp" -#include "RefmodeEngine.hpp" - -// Add to namespace -namespace cclyzer { -class InstructionVisitor; -} +#include // for InstVisitor +#include // for CastInst, BinaryOperator +#include // for AllocaInst (ptr only), Atom... +#include // for SingleThread +#include // for AtomicOrdering +#include // for llvm + +#include "FactGenerator.hpp" // for FactGenerator +#include "RefmodeEngine.hpp" // for refmode_t +#include "predicate_groups.hpp" // for instr, instr::flag + +// Forward declares +namespace llvm { +class DbgDeclareInst; +class Instruction; +class Module; +class User; +class Value; +} // namespace llvm // Processor of instructions class cclyzer::InstructionVisitor diff --git a/FactGenerator/include/Options.hpp b/FactGenerator/include/Options.hpp index 0fca671..aacf795 100644 --- a/FactGenerator/include/Options.hpp +++ b/FactGenerator/include/Options.hpp @@ -1,15 +1,17 @@ #ifndef OPTIONS_HPP__ #define OPTIONS_HPP__ -#include +#include // for Optional -#include -#include +#include // for max +#include // for path +#include // for string +#include // for vector -#include "ContextSensitivity.hpp" +#include "ContextSensitivity.hpp" // for ContextSensitivity namespace cclyzer { -class Options; +class Options; // IWYU pragma: keep } class cclyzer::Options { diff --git a/FactGenerator/include/RefmodeEngine.hpp b/FactGenerator/include/RefmodeEngine.hpp index a3a4ea7..795cd4e 100644 --- a/FactGenerator/include/RefmodeEngine.hpp +++ b/FactGenerator/include/RefmodeEngine.hpp @@ -1,18 +1,20 @@ #ifndef REFMODE_ENGINE_HPP__ #define REFMODE_ENGINE_HPP__ -#include -#include -#include -#include -#include -#include -#include -#include - -#include +#include // IWYU pragma: keep +#include // IWYU pragma: keep +#include // IWYU pragma: keep +#include // IWYU pragma: keep + +#include // IWYU pragma: keep #include +namespace llvm { +class Function; +class Module; +class Value; +} // namespace llvm + namespace cclyzer { namespace refmode { diff --git a/FactGenerator/include/TypeAccumulator.hpp b/FactGenerator/include/TypeAccumulator.hpp index 6c1b835..a8c8b0d 100644 --- a/FactGenerator/include/TypeAccumulator.hpp +++ b/FactGenerator/include/TypeAccumulator.hpp @@ -1,14 +1,18 @@ #ifndef TYPE_ACCUMULATOR_HPP__ #define TYPE_ACCUMULATOR_HPP__ -#include -#include -#include +#include // for LLVM_VERSION_MAJOR +#include // for StructType, FunctionType +#include // for Type +#include // for cast, dyn_cast +#include // for errs, raw_fd_ostream +#include // for size_t -#include +#include // for hash +#include // for unordered_set namespace cclyzer::llvm_utils { -class TypeAccumulator; +class TypeAccumulator; // IWYU pragma: keep } // namespace cclyzer::llvm_utils class cclyzer::llvm_utils::TypeAccumulator { diff --git a/FactGenerator/include/TypeVisitor.hpp b/FactGenerator/include/TypeVisitor.hpp index 39be766..446ba87 100644 --- a/FactGenerator/include/TypeVisitor.hpp +++ b/FactGenerator/include/TypeVisitor.hpp @@ -1,6 +1,13 @@ -#include -#include -#include +// Forward decls +namespace llvm { +class ArrayType; +class DataLayout; +class FunctionType; +class PointerType; +class StructType; +class Type; +class VectorType; +} // namespace llvm namespace cclyzer { // Forward declaration diff --git a/FactGenerator/include/llvm_enums.hpp b/FactGenerator/include/llvm_enums.hpp index 4e5660c..2645c91 100644 --- a/FactGenerator/include/llvm_enums.hpp +++ b/FactGenerator/include/llvm_enums.hpp @@ -1,12 +1,12 @@ #ifndef LLVM_ENUMS_HPP__ #define LLVM_ENUMS_HPP__ -#include -#include -#include -#include +#include // for ID +#include // for GlobalValue, GlobalValue::L... +#include // for GlobalVariable +#include // for AtomicOrdering -#include +#include // for string namespace cclyzer::utils { // Functions that convert the various LLVM enums to strings diff --git a/FactGenerator/include/predicate.hpp b/FactGenerator/include/predicate.hpp index e6c7a5d..891bac9 100644 --- a/FactGenerator/include/predicate.hpp +++ b/FactGenerator/include/predicate.hpp @@ -1,13 +1,11 @@ #ifndef PREDICATE_H__ #define PREDICATE_H__ -#include +#include #include #include #include -#include "Singleton.hpp" - namespace cclyzer { /* Forward declarations to be able to define actual registries */ class Predicate; diff --git a/FactGenerator/src/FactGenerator.cpp b/FactGenerator/src/FactGenerator.cpp index 7a5e48b..409af5f 100644 --- a/FactGenerator/src/FactGenerator.cpp +++ b/FactGenerator/src/FactGenerator.cpp @@ -1,17 +1,41 @@ #include "FactGenerator.hpp" -#include -#include -#include -#include - -#include -#include - -#include "ContextSensitivity.hpp" -#include "InstructionVisitor.hpp" -#include "Signatures.hpp" -#include "predicate_groups.hpp" +#include // for SmallVector, SmallVectorTemplat... +#include // for StringRef +#include // for operator!=, ilist_iterator +#include // for BasicBlock +#include // for const_pred_iterator, pred_begin +#include // for DebugLoc +#include // for Function +#include // for GlobalAlias +#include // for GlobalVariable +#include // for Instruction +#include // for MDNode (ptr only), NamedMDNode +#include // for Module, Module::const_alias_ite... +#include // for Type +#include // for cast, isa +#include // for Array +#include // for size_t + +#include // for refmode_t +#include // for operator++ +#include // for regex, regex_search, match_resu... +#include // for string, operator==, basic_string +#include // for pair + +#include "ContextSensitivity.hpp" // for context_sensitivity_to_string +#include "InstructionVisitor.hpp" // for InstructionVisitor +#include "Signatures.hpp" // for emit_signatures, preprocess_sig... +#include "predicate_groups.hpp" // for instr, variable, block, block::... + +// Forward declarations +namespace cclyzer { +class FactWriter; +} +namespace llvm { +class GlobalValue; +class Value; +} // namespace llvm using cclyzer::FactGenerator; using llvm::cast; diff --git a/FactGenerator/src/FactWriter.cpp b/FactGenerator/src/FactWriter.cpp index 32baf47..5a2a680 100644 --- a/FactGenerator/src/FactWriter.cpp +++ b/FactGenerator/src/FactWriter.cpp @@ -1,7 +1,13 @@ +// IWYU pragma: no_include #include "FactWriter.hpp" #include +#include // for create_directory +#include // for filesystem +#include // for operator!=, _Rb... +#include // for move +#include "csv_writer.hpp" // for csv_writer #include "predicate_groups.hpp" namespace fs = boost::filesystem; diff --git a/FactGenerator/src/InstructionVisitor.cpp b/FactGenerator/src/InstructionVisitor.cpp index 6868592..5f9c571 100644 --- a/FactGenerator/src/InstructionVisitor.cpp +++ b/FactGenerator/src/InstructionVisitor.cpp @@ -1,12 +1,36 @@ #include "InstructionVisitor.hpp" -#include -#include - -#include -#include - -#include "predicate_groups.hpp" +#include // for APInt +#include // for SmallString +#include // for StringRef +#include // for iterator_facade_base +#include // for iterator_range +#include // for LLVM_VERSION_MAJOR +#include // for BasicBlock +#include // for C +#include // for Constant +#include // for UndefValue, ConstantInt +#include // for DILocalVariable +#include // for DebugLoc +#include // for Instruction +#include // for DbgDeclareInst +#include // for FPMathOperator, OverflowingBi... +#include // for User +#include // for Value +#include // for dyn_cast, isa +#include // for errs, raw_ostream, raw_fd_ost... + +#include // for FactGenerator +#include // for refmode_t +#include // for string, basic_string + +#include "predicate_groups.hpp" // for instr, instr::flag, br, cmpxchg +namespace llvm { +class InlineAsm; +} +namespace llvm { +class Type; +} namespace pred = cclyzer::predicates; diff --git a/FactGenerator/src/Options.cpp b/FactGenerator/src/Options.cpp index 99a9e9f..31b6f0a 100644 --- a/FactGenerator/src/Options.cpp +++ b/FactGenerator/src/Options.cpp @@ -1,12 +1,31 @@ #include "Options.hpp" -#include -#include +#include // for exit, EXI... + +// IWYU pragma: no_include +// IWYU pragma: no_include +// IWYU pragma: no_include +#include // for ContextSe... +#include // IWYU pragma: keep +#include // for basename +#include // for directory... +#include // for exists +#include // for filesystem +#include // for operator!= +#include // for bad_lexic... +#include // IWYU pragma: keep +#include // for required_... #include #include +#include // for positiona... +#include // for typed_value #include +#include // for iterator_... +#include // for operator== #include #include +#include // for basic_str... +#include namespace fs = boost::filesystem; namespace po = boost::program_options; diff --git a/FactGenerator/src/RefmodeEngine.cpp b/FactGenerator/src/RefmodeEngine.cpp index f51f650..109337c 100644 --- a/FactGenerator/src/RefmodeEngine.cpp +++ b/FactGenerator/src/RefmodeEngine.cpp @@ -1,14 +1,28 @@ #include "RefmodeEngine.hpp" -#include -#include -#include - -#include -#include - -#include "RefmodeEngineImpl.hpp" -#include "llvm_enums.hpp" +#include // for BasicBlock +#include // for Constant +#include // for DINode +#include // for StructType +#include // for Function +#include // for GlobalValue +#include // for MDNode +#include // for Type +#include // for cast, dyn_cast, isa +#include // for raw_string_ostream, raw_ostream + +#include // for unique_ptr +#include // for ostringstream, operator<< + +#include "ContextManager.hpp" // for ContextManager +#include "RefmodeEngineImpl.hpp" // for RefmodeEngine::Impl +#include "llvm_enums.hpp" // for to_string, utils +namespace llvm { +class InlineAsm; +} +namespace llvm { +class Instruction; +} using cclyzer::refmode_t; using cclyzer::RefmodeEngine; diff --git a/FactGenerator/src/RefmodeEngineImpl.cpp b/FactGenerator/src/RefmodeEngineImpl.cpp index 7f6562b..7a3f76c 100644 --- a/FactGenerator/src/RefmodeEngineImpl.cpp +++ b/FactGenerator/src/RefmodeEngineImpl.cpp @@ -1,11 +1,24 @@ #include "RefmodeEngineImpl.hpp" -#include -#include - -#include -#include -#include +#include // for ilist_iterator, operator!= +#include // for iterator_range +#include // for Argument +#include // for BasicBlock +#include // for Instruction +#include // for ValueAsMetadata, Metadata... +#include // for Type +#include // for Value +#include // for raw_string_ostream, raw_o... + +#include // for RefmodeEngine, refmode_t +#include // for trim +#include // for map + +// Forward decl +namespace llvm { +class Constant; +class GlobalValue; +} // namespace llvm using cclyzer::refmode_t; using cclyzer::RefmodeEngine; diff --git a/FactGenerator/src/RefmodeEngineImpl.hpp b/FactGenerator/src/RefmodeEngineImpl.hpp index 55565ea..f5757bc 100644 --- a/FactGenerator/src/RefmodeEngineImpl.hpp +++ b/FactGenerator/src/RefmodeEngineImpl.hpp @@ -1,15 +1,24 @@ -#include +#include // for assert +#include // for Function +#include // for ModuleSlotTracker +#include // for isa, dyn_cast -#include -#include +#include // for map +#include // for unique_ptr, make_unique +#include // for string +#include // for vector -#include "ContextManager.hpp" -#include "RefmodeEngine.hpp" +#include "ContextManager.hpp" // for ContextManager, ContextManage... +#include "RefmodeEngine.hpp" // for refmode_t, RefmodeEngine // Forward declaration namespace llvm { +class BasicBlock; +class Metadata; +class Module; +class Value; class raw_string_ostream; -} +} // namespace llvm // Refmode Policy implementation class cclyzer::RefmodeEngine::Impl { diff --git a/FactGenerator/src/Signatures.cpp b/FactGenerator/src/Signatures.cpp index 050f620..edb4dec 100644 --- a/FactGenerator/src/Signatures.cpp +++ b/FactGenerator/src/Signatures.cpp @@ -1,4 +1,24 @@ -#include "Signatures.hpp" +#include // for DenseMapPair, DenseMapIterator +#include // for Optional +#include // for StringRef +#include // for Expected +#include // for Array, Value, Object, parse, Obj... +#include // for size_t + +#include // for ForwardingFactWriter +#include // for path +#include // for int64_t +#include // for istreambuf_iterator, operator!= +#include // for map +#include +#include // for basic_stringbuf<>::int_type, bas... +#include // for invalid_argument +#include // for string, operator==, operator+ +#include // for tuple, get, make_tuple, tuple_cat +#include // for remove_reference_t +#include // for vector + +#include "predicate_groups.hpp" // for signature, signature::arg_alloc template auto extract_from_array(const llvm::json::Array &json_array, size_t index) diff --git a/FactGenerator/src/TypeVisitor.cpp b/FactGenerator/src/TypeVisitor.cpp index 6baa12d..fbb7fd2 100644 --- a/FactGenerator/src/TypeVisitor.cpp +++ b/FactGenerator/src/TypeVisitor.cpp @@ -1,7 +1,21 @@ #include "TypeVisitor.hpp" -#include "FactGenerator.hpp" -#include "predicate_groups.hpp" +#include // for assert +#include // for StringRef +#include // for LLVM_VERSION_MAJOR +#include // for DataLayout, StructLayout +#include // for StructType, FunctionType, Vecto... +#include // for Type, Type::ArrayTyID, Type::BF... +#include // for cast, isa +#include // for TypeSize +#include // for size_t +#include // for uint64_t + +#include // for refmode_t +#include // for basic_string + +#include "FactGenerator.hpp" // for FactGenerator +#include "predicate_groups.hpp" // for struct_type, func_type, array_type using cclyzer::TypeVisitor; namespace pred = cclyzer::predicates; diff --git a/FactGenerator/src/assembly.cpp b/FactGenerator/src/assembly.cpp index e1184dd..c8978e5 100644 --- a/FactGenerator/src/assembly.cpp +++ b/FactGenerator/src/assembly.cpp @@ -1,11 +1,23 @@ -#include - -#include -#include -#include - -#include "FactGenerator.hpp" -#include "predicate_groups.hpp" +#include // for PointerType +#include // for InlineAsm +#include // for cast, isa +#include // for llvm +#include // for size_t + +#include // for refmode_t +#include // for replace_all +#include // for hash +#include // for iterator_value<>::type +#include // for unordered_set +#include // for _Deque_iterator +#include // for string, allocator + +#include "FactGenerator.hpp" // for FactGenerator +#include "predicate_groups.hpp" // for constant, inline_asm + +namespace llvm { +class Type; +} using cclyzer::FactGenerator; using llvm::cast; diff --git a/FactGenerator/src/constants.cpp b/FactGenerator/src/constants.cpp index 07454d5..2345b17 100644 --- a/FactGenerator/src/constants.cpp +++ b/FactGenerator/src/constants.cpp @@ -1,9 +1,25 @@ +#include // for APInt +#include // for SmallString +#include // for StringRef +#include // for LLVM_VERSION_MAJOR +#include // for Constant #include - -#include +#include // for Function +#include // for GlobalVariable +#include // for isa, cast +#include // for llvm +#include // for raw_string_ostream +#include // for size_t + +#include // for refmode_t +#include // for hash +#include // for flyweight, operator< +#include // for operator++ +#include // for map #include #include "FactGenerator.hpp" +#include "llvm/IR/Instruction.h" // for Instruction::BitCast #include "predicate_groups.hpp" using cclyzer::FactGenerator; diff --git a/FactGenerator/src/functions.cpp b/FactGenerator/src/functions.cpp index e378b4e..1e7dbb5 100644 --- a/FactGenerator/src/functions.cpp +++ b/FactGenerator/src/functions.cpp @@ -1,9 +1,22 @@ -#include -#include -#include - -#include "FactGenerator.hpp" -#include "predicate_groups.hpp" +#include // for StringRef +#include // for LLVM_VERSION_MAJOR, LLVM_VE... +#include // for Argument +#include // for C +#include // for FunctionType +#include // for Function, Function::const_a... + +#include // for refmode_t +#include // for flyweight, operator< +#include // for operator++ +#include // for map +#include // for string, operator==, operator+ + +#include "FactGenerator.hpp" // for FactGenerator +#include "predicate_groups.hpp" // for func, func::alignment, func... +namespace llvm { +class Constant; +class Value; +} // namespace llvm using cclyzer::FactGenerator; namespace pred = cclyzer::predicates; diff --git a/FactGenerator/src/globals.cpp b/FactGenerator/src/globals.cpp index bd913dd..8ba0e59 100644 --- a/FactGenerator/src/globals.cpp +++ b/FactGenerator/src/globals.cpp @@ -1,8 +1,20 @@ -#include -#include - -#include "FactGenerator.hpp" -#include "predicate_groups.hpp" +#include // for StringRef +#include // for LLVM_VERSION_MAJOR, LLVM_VE... +#include // for PointerType +#include // for GlobalAlias +#include // for GlobalVariable + +#include // for refmode_t +#include // for flyweight, operator< +#include // for operator++ +#include // for map +#include // for string, operator==, operator+ + +#include "FactGenerator.hpp" // for FactGenerator +#include "predicate_groups.hpp" // for global_var, alias, global_v... +namespace llvm { +class Constant; +} using cclyzer::FactGenerator; namespace pred = cclyzer::predicates; diff --git a/FactGenerator/src/llvm_enums.cpp b/FactGenerator/src/llvm_enums.cpp index 5de88d9..80a899a 100644 --- a/FactGenerator/src/llvm_enums.cpp +++ b/FactGenerator/src/llvm_enums.cpp @@ -1,8 +1,7 @@ #include "llvm_enums.hpp" -#include - -#include +#include // for LLVM_VERSION_MAJOR, LLVM_VERSI... +#include // for errs, raw_ostream, raw_fd_ostream using std::string; diff --git a/FactGenerator/src/main.cpp b/FactGenerator/src/main.cpp index 9a206d5..0767073 100644 --- a/FactGenerator/src/main.cpp +++ b/FactGenerator/src/main.cpp @@ -1,19 +1,29 @@ -#include -#include -#include -#include -#include - -#include -#include -#include - -#include "ContextSensitivity.hpp" -#include "FactGenerator.hpp" -#include "FactWriter.hpp" -#include "Options.hpp" -#include "ParseException.hpp" -#include "factgen.hpp" +#include // for Optional +#include // for LLVM_VERSION_MAJOR, LLVM... +#include // for LLVMContext +#include // for Module +#include // for parseIRFile +#include // for SMDiagnostic +#include // for EXIT_FAILURE, EXIT_SUCCESS + +#include // for canonical +#include // for path +#include // for filesystem +#include // for operator<<, endl, basic_... +#include // for unique_ptr +#include // for string +#include // for move +#include // for vector + +#include "ContextSensitivity.hpp" // for ContextSensitivity, INSE... +#include "FactGenerator.hpp" // for FactGenerator +#include "FactWriter.hpp" // for FactWriter +#include "Options.hpp" // for Options +#include "ParseException.hpp" // for ParseException +#include "factgen.hpp" // for factgen +namespace llvm { +class DataLayout; +} // Type aliases namespace fs = boost::filesystem; diff --git a/FactGenerator/src/types.cpp b/FactGenerator/src/types.cpp index af29452..c9d76b7 100644 --- a/FactGenerator/src/types.cpp +++ b/FactGenerator/src/types.cpp @@ -1,12 +1,16 @@ -#include -#include - -#include - -#include "FactGenerator.hpp" -#include "TypeAccumulator.hpp" -#include "TypeVisitor.hpp" -#include "predicate_groups.hpp" +// IWYU pragma: no_include +#include // for unordered_set<>... +#include // for allocator + +#include "FactGenerator.hpp" // for FactGenerator +#include "TypeAccumulator.hpp" // for TypeAccumulator +#include "TypeVisitor.hpp" // for TypeVisitor +#include "predicate_groups.hpp" // for primitive_type + +// Forward decls +namespace llvm { +class DataLayout; +} using cclyzer::FactGenerator; namespace pred = cclyzer::predicates; diff --git a/FactGenerator/src/variables.cpp b/FactGenerator/src/variables.cpp index 9ce2435..728f066 100644 --- a/FactGenerator/src/variables.cpp +++ b/FactGenerator/src/variables.cpp @@ -1,9 +1,16 @@ -#include +// IWYU pragma: no_include -#include +#include // for StringRef, Stri... +#include // for Function +#include // for size_t -#include "FactGenerator.hpp" -#include "predicate_groups.hpp" +#include // for unordered_map<>... +#include // for string, operator+ +#include // for add_const<>::type +#include // for tuple_element<>... + +#include "FactGenerator.hpp" // for FactGenerator +#include "predicate_groups.hpp" // for variable, predi... using cclyzer::FactGenerator; namespace pred = cclyzer::predicates; diff --git a/docker/dev.dockerfile b/docker/dev.dockerfile index b98b8ad..54145fa 100644 --- a/docker/dev.dockerfile +++ b/docker/dev.dockerfile @@ -17,6 +17,7 @@ SHELL ["/bin/bash", "-c", "-o", "pipefail"] ENV DEBIAN_FRONTEND=noninteractive # cmake: Build system +# iwyu: Linter # git: Later steps of Dockerfile # gnupg: Later steps of Dockerfile # ninja-build: Build system @@ -31,6 +32,7 @@ ENV DEBIAN_FRONTEND=noninteractive RUN apt-get update && \ apt-get --yes install --no-install-recommends \ cmake \ + iwyu \ git \ gnupg \ ninja-build \