Hi,

clang ships with a pretty useful static analyzer to find all kinds of bugs
in C and C++ code:

https://clang-analyzer.llvm.org/

I use it regularly to check my own diffs and found plenty of bugs I could
have missed otherwise.  While we have the code in base we don't actually
build it into our libclang currently, so the only ways to use it are
manually modifying the Makefiles or installing llvm from ports.

I was wondering if anyone else uses this and if there was any interest to
have this in our base clang?

diff --git gnu/usr.bin/clang/Makefile gnu/usr.bin/clang/Makefile
index 6cf71d36cf8..b47abc02474 100644
--- gnu/usr.bin/clang/Makefile
+++ gnu/usr.bin/clang/Makefile
@@ -39,6 +39,11 @@ SUBDIR+=libclangSerialization
 SUBDIR+=libclangFrontend
 SUBDIR+=libclangRewriteFrontend
 SUBDIR+=libclangFrontendTool
+SUBDIR+=libclangASTMatchers
+SUBDIR+=libclangCrossTU
+SUBDIR+=libclangStaticAnalyzer
+SUBDIR+=libclangIndex
+SUBDIR+=libclangTooling
 
 SUBDIR+=clang
 
diff --git gnu/usr.bin/clang/clang/Makefile gnu/usr.bin/clang/clang/Makefile
index 76535ee8842..7d3847f883d 100644
--- gnu/usr.bin/clang/clang/Makefile
+++ gnu/usr.bin/clang/clang/Makefile
@@ -43,6 +43,11 @@ LLVM_LIBDEPS=        LLVM \
                clangEdit \
                clangAST \
                clangLex \
-               clangBasic
+               clangBasic \
+               clangStaticAnalyzer \
+               clangCrossTU \
+               clangASTMatchers \
+               clangIndex \
+               clangTooling \
 
 .include <bsd.prog.mk>
diff --git gnu/usr.bin/clang/include/clang/Config/config.h 
gnu/usr.bin/clang/include/clang/Config/config.h
index 02a049bf2be..93494d6a0b1 100644
--- gnu/usr.bin/clang/include/clang/Config/config.h
+++ gnu/usr.bin/clang/include/clang/Config/config.h
@@ -78,7 +78,7 @@
 /* Enable each functionality of modules */
 #define CLANG_ENABLE_ARCMT 0
 #define CLANG_ENABLE_OBJC_REWRITER 0
-#define CLANG_ENABLE_STATIC_ANALYZER 0
+#define CLANG_ENABLE_STATIC_ANALYZER 1
 
 /* Spawn a new process clang.exe for the CC1 tool invocation, when necessary */
 #define CLANG_SPAWN_CC1 0
diff --git gnu/usr.bin/clang/libclangASTMatchers/Makefile 
gnu/usr.bin/clang/libclangASTMatchers/Makefile
new file mode 100644
index 00000000000..76c79c738cb
--- /dev/null
+++ gnu/usr.bin/clang/libclangASTMatchers/Makefile
@@ -0,0 +1,25 @@
+LIB=   clangASTMatchers
+NOPIC=
+NOPROFILE=
+
+CPPFLAGS+=      ${CLANG_INCLUDES}
+
+.include <bsd.own.mk>
+
+# Core
+SRCS+= ASTMatchFinder.cpp \
+       ASTMatchersInternal.cpp \
+       GtestMatchers.cpp \
+       Diagnostics.cpp \
+       Marshallers.cpp \
+       Parser.cpp \
+       Registry.cpp \
+       VariantValue.cpp \
+
+.PATH: ${.CURDIR}/../../../llvm/clang/lib/ASTMatchers
+.PATH: ${.CURDIR}/../../../llvm/clang/lib/ASTMatchers/Dynamic
+
+install:
+       @# Nothing here so far ...
+
+.include <bsd.lib.mk>
diff --git gnu/usr.bin/clang/libclangAnalysis/Makefile 
gnu/usr.bin/clang/libclangAnalysis/Makefile
index 25669a34cc0..7be18f24685 100644
--- gnu/usr.bin/clang/libclangAnalysis/Makefile
+++ gnu/usr.bin/clang/libclangAnalysis/Makefile
@@ -23,6 +23,7 @@ SRCS= AnalysisDeclContext.cpp \
        ExprMutationAnalyzer.cpp \
        IssueHash.cpp \
        LiveVariables.cpp \
+       MacroExpansionContext.cpp \
        ObjCNoReturn.cpp \
        PathDiagnostic.cpp \
        PostOrderCFGView.cpp \
diff --git gnu/usr.bin/clang/libclangCrossTU/Makefile 
gnu/usr.bin/clang/libclangCrossTU/Makefile
new file mode 100644
index 00000000000..59541bce012
--- /dev/null
+++ gnu/usr.bin/clang/libclangCrossTU/Makefile
@@ -0,0 +1,17 @@
+LIB=   clangCrossTU
+NOPIC=
+NOPROFILE=
+
+CPPFLAGS+=     -I ${.CURDIR}/../../../llvm/clang/lib/CrossTU
+CPPFLAGS+=      ${CLANG_INCLUDES}
+
+.include <bsd.own.mk>
+
+SRCS+= CrossTranslationUnit.cpp \
+
+.PATH: ${.CURDIR}/../../../llvm/clang/lib/CrossTU/
+
+install:
+       @# Nothing here so far ...
+
+.include <bsd.lib.mk>
diff --git gnu/usr.bin/clang/libclangIndex/Makefile 
gnu/usr.bin/clang/libclangIndex/Makefile
new file mode 100644
index 00000000000..b31d906a5ee
--- /dev/null
+++ gnu/usr.bin/clang/libclangIndex/Makefile
@@ -0,0 +1,18 @@
+LIB=   clangIndex
+NOPIC=
+NOPROFILE=
+
+CPPFLAGS+=     -I ${.CURDIR}/../../../llvm/clang/lib/Index
+CPPFLAGS+=      ${CLANG_INCLUDES}
+
+.include <bsd.own.mk>
+
+SRCS+= CommentToXML.cpp \
+       USRGeneration.cpp \
+
+.PATH: ${.CURDIR}/../../../llvm/clang/lib/Index/
+
+install:
+       @# Nothing here so far ...
+
+.include <bsd.lib.mk>
diff --git gnu/usr.bin/clang/libclangStaticAnalyzer/Makefile 
gnu/usr.bin/clang/libclangStaticAnalyzer/Makefile
new file mode 100644
index 00000000000..6d152afe283
--- /dev/null
+++ gnu/usr.bin/clang/libclangStaticAnalyzer/Makefile
@@ -0,0 +1,206 @@
+LIB=   clangStaticAnalyzer
+NOPIC=
+NOPROFILE=
+
+CPPFLAGS+=     -I ${.CURDIR}/../../../llvm/clang/lib/StaticAnalyzer/Checkers
+CPPFLAGS+=      ${CLANG_INCLUDES}
+
+.include <bsd.own.mk>
+
+# Core
+SRCS+= APSIntType.cpp \
+       AnalysisManager.cpp \
+       AnalyzerOptions.cpp \
+       BasicValueFactory.cpp \
+       BlockCounter.cpp \
+       BugReporter.cpp \
+       BugReporterVisitors.cpp \
+       CallEvent.cpp \
+       Checker.cpp \
+       CheckerContext.cpp \
+       CheckerHelpers.cpp \
+       CheckerManager.cpp \
+       CheckerRegistryData.cpp \
+       CommonBugCategories.cpp \
+       ConstraintManager.cpp \
+       CoreEngine.cpp \
+       DynamicExtent.cpp \
+       DynamicType.cpp \
+       Environment.cpp \
+       ExplodedGraph.cpp \
+       ExprEngine.cpp \
+       ExprEngineC.cpp \
+       ExprEngineCXX.cpp \
+       ExprEngineCallAndReturn.cpp \
+       ExprEngineObjC.cpp \
+       FunctionSummary.cpp \
+       HTMLDiagnostics.cpp \
+       LoopUnrolling.cpp \
+       LoopWidening.cpp \
+       MemRegion.cpp \
+       PlistDiagnostics.cpp \
+       ProgramState.cpp \
+       RangeConstraintManager.cpp \
+       RangedConstraintManager.cpp \
+       RegionStore.cpp \
+       SMTConstraintManager.cpp \
+       SValBuilder.cpp \
+       SVals.cpp \
+       SarifDiagnostics.cpp \
+       SimpleConstraintManager.cpp \
+       SimpleSValBuilder.cpp \
+       Store.cpp \
+       SymbolManager.cpp \
+       TextDiagnostics.cpp \
+       WorkList.cpp \
+
+# Frontend
+SRCS+= AnalysisConsumer.cpp \
+       AnalyzerHelpFlags.cpp \
+       CheckerRegistry.cpp \
+       CreateCheckerManager.cpp \
+       FrontendActions.cpp \
+       ModelConsumer.cpp \
+       ModelInjector.cpp \
+
+# Checkers
+SRCS+= AnalysisOrderChecker.cpp \
+       AnalyzerStatsChecker.cpp \
+       ArrayBoundChecker.cpp \
+       ArrayBoundCheckerV2.cpp \
+       BlockInCriticalSectionChecker.cpp \
+       BoolAssignmentChecker.cpp \
+       BuiltinFunctionChecker.cpp \
+       CStringChecker.cpp \
+       CStringSyntaxChecker.cpp \
+       CallAndMessageChecker.cpp \
+       CastSizeChecker.cpp \
+       CastToStructChecker.cpp \
+       CastValueChecker.cpp \
+       CheckSecuritySyntaxOnly.cpp \
+       CheckSizeofPointer.cpp \
+       CheckerDocumentation.cpp \
+       ChrootChecker.cpp \
+       CloneChecker.cpp \
+       ConversionChecker.cpp \
+       DeadStoresChecker.cpp \
+       DebugCheckers.cpp \
+       DereferenceChecker.cpp \
+       DivZeroChecker.cpp \
+       ExprInspectionChecker.cpp \
+       FixedAddressChecker.cpp \
+       GenericTaintChecker.cpp \
+       IdenticalExprChecker.cpp \
+       InnerPointerChecker.cpp \
+       InvalidatedIteratorChecker.cpp \
+       IvarInvalidationChecker.cpp \
+       LocalizationChecker.cpp \
+       MallocChecker.cpp \
+       MallocOverflowSecurityChecker.cpp \
+       MallocSizeofChecker.cpp \
+       MismatchedIteratorChecker.cpp \
+       MmapWriteExecChecker.cpp \
+       NSAutoreleasePoolChecker.cpp \
+       NSErrorChecker.cpp \
+       NoReturnFunctionChecker.cpp \
+       NonNullParamChecker.cpp \
+       NonnullGlobalConstantsChecker.cpp \
+       NullabilityChecker.cpp \
+       NumberObjectConversionChecker.cpp \
+       PaddingChecker.cpp \
+       PointerArithChecker.cpp \
+       PointerIterationChecker.cpp \
+       PointerSortingChecker.cpp \
+       PointerSubChecker.cpp \
+       PthreadLockChecker.cpp \
+       ReturnPointerRangeChecker.cpp \
+       ReturnUndefChecker.cpp \
+       ReturnValueChecker.cpp \
+       RunLoopAutoreleaseLeakChecker.cpp \
+       SimpleStreamChecker.cpp \
+       StackAddrEscapeChecker.cpp \
+       StdLibraryFunctionsChecker.cpp \
+       StreamChecker.cpp \
+       Taint.cpp \
+       TaintTesterChecker.cpp \
+       TestAfterDivZeroChecker.cpp \
+       TraversalChecker.cpp \
+       TrustNonnullChecker.cpp \
+       UndefBranchChecker.cpp \
+       UndefCapturedBlockVarChecker.cpp \
+       UndefResultChecker.cpp \
+       UndefinedArraySubscriptChecker.cpp \
+       UndefinedAssignmentChecker.cpp \
+       UnixAPIChecker.cpp \
+       UnreachableCodeChecker.cpp \
+       VLASizeChecker.cpp \
+       ValistChecker.cpp \
+       VforkChecker.cpp \
+       VirtualCallChecker.cpp \
+       BasicObjCFoundationChecks.cpp \
+       CheckObjCDealloc.cpp \
+       CheckObjCInstMethSignature.cpp \
+       FuchsiaHandleChecker.cpp \
+       MIGChecker.cpp \
+       MacOSKeychainAPIChecker.cpp \
+       MacOSXAPIChecker.cpp \
+       ObjCAtSyncChecker.cpp \
+       ObjCAutoreleaseWriteChecker.cpp \
+       ObjCContainersASTChecker.cpp \
+       ObjCContainersChecker.cpp \
+       ObjCMissingSuperCallChecker.cpp \
+       ObjCPropertyChecker.cpp \
+       ObjCSelfInitChecker.cpp \
+       ObjCSuperDeallocChecker.cpp \
+       ObjCUnusedIVarsChecker.cpp \
+       OSObjectCStyleCast.cpp \
+       CXXSelfAssignmentChecker.cpp \
+       ContainerModeling.cpp \
+       DebugContainerModeling.cpp \
+       DebugIteratorModeling.cpp \
+       DeleteWithNonVirtualDtorChecker.cpp \
+       MPIBugReporter.cpp \
+       MPIChecker.cpp \
+       MPIFunctionClassifier.cpp \
+       RetainCountChecker.cpp \
+       RetainCountDiagnostics.cpp \
+       UninitializedObjectChecker.cpp \
+       UninitializedPointee.cpp \
+       PutenvWithAutoChecker.cpp \
+       DirectIvarAssignment.cpp \
+       MoveChecker.cpp \
+       LLVMConventionsChecker.cpp \
+       DynamicTypeChecker.cpp \
+       DynamicTypePropagation.cpp \
+       STLAlgorithmModeling.cpp \
+       SmartPtrChecker.cpp \
+       EnumCastOutOfRangeChecker.cpp \
+       GCDAntipatternChecker.cpp \
+       NoUncountedMembersChecker.cpp \
+       RefCntblBaseVirtualDtorChecker.cpp \
+       UncountedCallArgsChecker.cpp \
+       UncountedLambdaCapturesChecker.cpp \
+       UncountedLocalVarsChecker.cpp \
+       PtrTypesSemantics.cpp \
+       GTestChecker.cpp \
+       IteratorModeling.cpp \
+       Iterator.cpp \
+       IteratorRangeChecker.cpp \
+       CheckPlacementNew.cpp \
+       ASTUtils.cpp \
+       UncountedCallArgsChecker.cpp \
+       SmartPtrModeling.cpp \
+
+.PATH: ${.CURDIR}/../../../llvm/clang/lib/StaticAnalyzer/Checkers
+.PATH: ${.CURDIR}/../../../llvm/clang/lib/StaticAnalyzer/Checkers/MPI-Checker
+.PATH: 
${.CURDIR}/../../../llvm/clang/lib/StaticAnalyzer/Checkers/UninitializedObject
+.PATH: 
${.CURDIR}/../../../llvm/clang/lib/StaticAnalyzer/Checkers/RetainCountChecker
+.PATH: ${.CURDIR}/../../../llvm/clang/lib/StaticAnalyzer/Checkers/WebKit
+.PATH: ${.CURDIR}/../../../llvm/clang/lib/StaticAnalyzer/Checkers/cert
+.PATH: ${.CURDIR}/../../../llvm/clang/lib/StaticAnalyzer/Core
+.PATH: ${.CURDIR}/../../../llvm/clang/lib/StaticAnalyzer/Frontend
+
+install:
+       @# Nothing here so far ...
+
+.include <bsd.lib.mk>
diff --git gnu/usr.bin/clang/libclangTooling/Makefile 
gnu/usr.bin/clang/libclangTooling/Makefile
new file mode 100644
index 00000000000..bb1aa00b4f9
--- /dev/null
+++ gnu/usr.bin/clang/libclangTooling/Makefile
@@ -0,0 +1,20 @@
+LIB=   clangTooling
+NOPIC=
+NOPROFILE=
+
+CPPFLAGS+=     -I ${.CURDIR}/../../../llvm/clang/lib/Tooling
+CPPFLAGS+=      ${CLANG_INCLUDES}
+
+.include <bsd.own.mk>
+
+SRCS+= Refactoring.cpp \
+       Replacement.cpp \
+
+
+.PATH: ${.CURDIR}/../../../llvm/clang/lib/Tooling/
+.PATH: ${.CURDIR}/../../../llvm/clang/lib/Tooling/Core/
+
+install:
+       @# Nothing here so far ...
+
+.include <bsd.lib.mk>

Reply via email to