From ad81bc70209a7cf317d1004976d8a71131752335 Mon Sep 17 00:00:00 2001 From: Pietro Fezzardi Date: Tue, 14 Jun 2022 12:21:22 +0200 Subject: [PATCH] Enable addtional compilation warnings These warnings are not enabled by default with -Wall nor with -Wextra. --- CMakeLists.txt | 7 +++++++ lib/Backend/DecompileFunction.cpp | 12 ++++++------ lib/DataLayoutAnalysis/DLATypeSystem.cpp | 1 + lib/IRCanonicalization/MakeModelGEPPass.cpp | 2 +- lib/RestructureCFG/ASTNode.cpp | 2 +- lib/RestructureCFG/BeautifyGHAST.cpp | 2 +- lib/Support/ModelHelpers.cpp | 1 + tests/unit/DLASteps.cpp | 10 +++++----- 8 files changed, 23 insertions(+), 14 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c14bb23b6..1b2170cab 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -108,6 +108,13 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror ") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall ") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wextra ") +# Enable some additional warnings +add_flag_if_available("-Wimplicit-fallthrough") +add_flag_if_available("-Wnon-virtual-dtor") +add_flag_if_available("-Winconsistent-missing-destructor-override") +add_flag_if_available("-Wnewline-eof") +add_flag_if_available("-Wmissing-prototypes") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fstrict-aliasing ") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wstrict-aliasing ") diff --git a/lib/Backend/DecompileFunction.cpp b/lib/Backend/DecompileFunction.cpp index 24aee664f..3b64bda7e 100644 --- a/lib/Backend/DecompileFunction.cpp +++ b/lib/Backend/DecompileFunction.cpp @@ -84,7 +84,7 @@ static void decompilerLog(llvm::raw_ostream &Out, const llvm::Twine &Expr) { Out << "/* " << Expr << " */\n"; } -debug_function void dumpTokenMap(const TokenMapT &TokenMap) { +static void debug_function dumpTokenMap(const TokenMapT &TokenMap) { llvm::dbgs() << "========== TokenMap ===========\n"; for (auto [Value, Token] : TokenMap) { llvm::dbgs() << "Value: " << dumpToString(Value) << "\n"; @@ -1511,11 +1511,11 @@ void CCodeGenerator::emitFunction(bool NeedsLocalStateVar) { Out << "}\n"; } -std::string decompileFunction(const llvm::Function &LLVMFunc, - const ASTTree &CombedAST, - const Binary &Model, - const ValueSet &TopScopeVariables, - bool NeedsLocalStateVar) { +static std::string decompileFunction(const llvm::Function &LLVMFunc, + const ASTTree &CombedAST, + const Binary &Model, + const ValueSet &TopScopeVariables, + bool NeedsLocalStateVar) { std::string Result; llvm::raw_string_ostream Out(Result); diff --git a/lib/DataLayoutAnalysis/DLATypeSystem.cpp b/lib/DataLayoutAnalysis/DLATypeSystem.cpp index 793af1f82..82c0c1081 100644 --- a/lib/DataLayoutAnalysis/DLATypeSystem.cpp +++ b/lib/DataLayoutAnalysis/DLATypeSystem.cpp @@ -26,6 +26,7 @@ using NodeAllocatorT = SpecificBumpPtrAllocator; static Logger<> CollapsedNodePrinter("dla-print-collapsed-in-dot"); +void *operator new(size_t, NodeAllocatorT &NodeAllocator); void *operator new(size_t, NodeAllocatorT &NodeAllocator) { return NodeAllocator.Allocate(); } diff --git a/lib/IRCanonicalization/MakeModelGEPPass.cpp b/lib/IRCanonicalization/MakeModelGEPPass.cpp index cceacb637..34a506c78 100644 --- a/lib/IRCanonicalization/MakeModelGEPPass.cpp +++ b/lib/IRCanonicalization/MakeModelGEPPass.cpp @@ -595,7 +595,7 @@ struct TypedAccessPattern { enum AggregateKind { Struct, Union, Array }; -std::string toString(AggregateKind K) { +static std::string toString(AggregateKind K) { switch (K) { case Struct: return "Struct"; diff --git a/lib/RestructureCFG/ASTNode.cpp b/lib/RestructureCFG/ASTNode.cpp index 40bbb344c..12f0d9261 100644 --- a/lib/RestructureCFG/ASTNode.cpp +++ b/lib/RestructureCFG/ASTNode.cpp @@ -195,7 +195,7 @@ void CodeNode::dumpEdge(llvm::raw_fd_ostream &ASTFile) { // Do nothing, we don't have outgoing edges. } -std::string printBBName(ExprNode *Condition) { +static std::string printBBName(ExprNode *Condition) { if (auto *Atomic = llvm::dyn_cast(Condition)) return Atomic->getConditionalBasicBlock()->getName().str(); diff --git a/lib/RestructureCFG/BeautifyGHAST.cpp b/lib/RestructureCFG/BeautifyGHAST.cpp index 467c97600..053354873 100644 --- a/lib/RestructureCFG/BeautifyGHAST.cpp +++ b/lib/RestructureCFG/BeautifyGHAST.cpp @@ -1189,7 +1189,7 @@ collapseSequences(ASTTree &AST, ASTNode *Node) { rc_return Node; } -ASTNode *promoteNoFallthroughIf(ASTNode *RootNode, ASTTree &AST) { +static ASTNode *promoteNoFallthroughIf(ASTNode *RootNode, ASTTree &AST) { // This map will contain the result of the fallthough analysis. // We considered using a `std::set` in place of the `std::map`, but the `map` diff --git a/lib/Support/ModelHelpers.cpp b/lib/Support/ModelHelpers.cpp index 77fc1ecf7..eec886bbe 100644 --- a/lib/Support/ModelHelpers.cpp +++ b/lib/Support/ModelHelpers.cpp @@ -76,6 +76,7 @@ llvmIntToModelType(const llvm::Type *LLVMType, const model::Binary &Model) { case 1: case 8: ModelType.UnqualifiedType = Model.getPrimitiveType(Generic, 1); + break; case 16: ModelType.UnqualifiedType = Model.getPrimitiveType(Generic, 2); diff --git a/tests/unit/DLASteps.cpp b/tests/unit/DLASteps.cpp index 0b74c6a23..a30ef0b8f 100644 --- a/tests/unit/DLASteps.cpp +++ b/tests/unit/DLASteps.cpp @@ -60,11 +60,11 @@ addEquality(LayoutTypeSystem &TS, LTSN *Parent, unsigned ChildSize = 0U) { return Child; } -void checkNode(const LayoutTypeSystem &TS, - const LayoutTypeSystemNode *N, - const unsigned ExpectedSize, - const InterferingChildrenInfo ExpectedInfo, - const std::set &ExpectedEqClass) { +static void checkNode(const LayoutTypeSystem &TS, + const LayoutTypeSystemNode *N, + const unsigned ExpectedSize, + const InterferingChildrenInfo ExpectedInfo, + const std::set &ExpectedEqClass) { const dla::VectEqClasses &Eq = TS.getEqClasses(); revng_check(N); revng_check(not Eq.isRemoved(N->ID));