Ericsson / codechecker

CodeChecker is an analyzer tooling, defect database and viewer extension for the Clang Static Analyzer and Clang Tidy
https://codechecker.readthedocs.io
Apache License 2.0
2.23k stars 375 forks source link

Enabling only one checker does not work #1350

Closed Szelethus closed 6 years ago

Szelethus commented 6 years ago

Invocation:

CodeChecker analyze compile_commands.json --analyzers clang-tidy -o ~/Documents/clang/results --enable misc-throw-keyword-missing --verbose debug_analyzer

(misc-throw-keyword-missing is my own checker I'm working on, it is built in my Clang-Tidy.)

Clang-Tidy invocations look like this:

[DEBUG_ANALYZER][2018-02-06 19:06:38] {analyzer} [7572] <140322429159168> - analyzer_base.py:87 analyze() - 
clang-tidy -checks='-*,-clang-analyzer-*,-android-cloexec-accept,-android-cloexec-accept4,-android-cloexec-creat,-android-cloexec-dup,-android-cloexec-epoll-create,-android-cloexec-epoll-create1,-android-cloexec-fopen,-android-cloexec-inotify-init,-android-cloexec-inotify-init1,-android-cloexec-memfd-create,-android-cloexec-open,-android-cloexec-socket,-boost-use-to-string,-bugprone-argument-comment,-bugprone-assert-side-effect,-bugprone-bool-pointer-implicit-conversion,-bugprone-copy-constructor-init,-bugprone-dangling-handle,-bugprone-fold-init-type,-bugprone-forward-declaration-namespace,-bugprone-inaccurate-erase,bugprone-integer-division,-bugprone-misplaced-operator-in-strlen-in-alloc,-bugprone-move-forwarding-reference,-bugprone-multiple-statement-macro,-bugprone-string-constructor,bugprone-suspicious-memset-usage,bugprone-undefined-memory-manipulation,-bugprone-use-after-move,-bugprone-virtual-near-miss,-cert-dcl03-c,-cert-dcl21-cpp,-cert-dcl50-cpp,-cert-dcl54-cpp,cert-dcl58-cpp,-cert-dcl59-cpp,-cert-env33-c,-cert-err09-cpp,-cert-err34-c,-cert-err52-cpp,-cert-err58-cpp,-cert-err60-cpp,-cert-err61-cpp,-cert-fio38-c,-cert-flp30-c,-cert-msc30-c,-cert-msc50-cpp,-cert-oop11-cpp,-cppcoreguidelines-c-copy-assignment-signature,-cppcoreguidelines-interfaces-global-init,-cppcoreguidelines-no-malloc,-cppcoreguidelines-owning-memory,-cppcoreguidelines-pro-bounds-array-to-pointer-decay,-cppcoreguidelines-pro-bounds-constant-array-index,-cppcoreguidelines-pro-bounds-pointer-arithmetic,-cppcoreguidelines-pro-type-const-cast,-cppcoreguidelines-pro-type-cstyle-cast,-cppcoreguidelines-pro-type-member-init,-cppcoreguidelines-pro-type-reinterpret-cast,-cppcoreguidelines-pro-type-static-cast-downcast,-cppcoreguidelines-pro-type-union-access,-cppcoreguidelines-pro-type-vararg,-cppcoreguidelines-slicing,cppcoreguidelines-special-member-functions,-fuchsia-default-arguments,-fuchsia-overloaded-operator,-fuchsia-statically-constructed-objects,-fuchsia-virtual-inheritance,-google-build-explicit-make-pair,google-build-namespaces,-google-build-using-namespace,-google-default-arguments,-google-explicit-constructor,google-global-names-in-headers,-google-objc-avoid-throwing-exception,-google-objc-global-variable-declaration,-google-readability-braces-around-statements,-google-readability-casting,-google-readability-function-size,-google-readability-namespace-comments,-google-readability-redundant-smartptr-get,-google-readability-todo,-google-runtime-int,-google-runtime-member-string-references,-google-runtime-operator,-google-runtime-references,-hicpp-braces-around-statements,-hicpp-deprecated-headers,-hicpp-exception-baseclass,-hicpp-explicit-conversions,-hicpp-function-size,-hicpp-invalid-access-moved,-hicpp-member-init,-hicpp-move-const-arg,-hicpp-named-parameter,-hicpp-new-delete-operators,-hicpp-no-array-decay,-hicpp-no-assembler,-hicpp-no-malloc,-hicpp-noexcept-move,-hicpp-signed-bitwise,-hicpp-special-member-functions,-hicpp-static-assert,-hicpp-undelegated-constructor,-hicpp-use-auto,-hicpp-use-emplace,-hicpp-use-equals-default,-hicpp-use-equals-delete,-hicpp-use-noexcept,-hicpp-use-nullptr,-hicpp-use-override,-hicpp-vararg,-llvm-header-guard,-llvm-include-order,-llvm-namespace-comment,-llvm-twine-local,misc-definitions-in-headers,misc-forwarding-reference-overload,misc-incorrect-roundings,misc-lambda-function-name,-misc-macro-parentheses,misc-macro-repeated-side-effects,misc-misplaced-const,misc-misplaced-widening-cast,misc-new-delete-overloads,misc-non-copyable-objects,misc-redundant-expression,misc-sizeof-container,misc-sizeof-expression,-misc-static-assert,misc-string-compare,-misc-string-integer-assignment,misc-string-literal-with-embedded-nul,misc-suspicious-enum-usage,misc-suspicious-missing-comma,misc-suspicious-semicolon,-misc-suspicious-string-compare,misc-swapped-arguments,misc-throw-by-value-catch-by-reference,misc-throw-keyword-missing,misc-unconventional-assign-operator,misc-undelegated-constructor,misc-uniqueptr-reset-release,-misc-unused-alias-decls,-misc-unused-parameters,misc-unused-raii,-misc-unused-using-decls,-modernize-avoid-bind,-modernize-deprecated-headers,-modernize-loop-convert,-modernize-make-shared,-modernize-make-unique,-modernize-pass-by-value,-modernize-raw-string-literal,-modernize-redundant-void-arg,-modernize-replace-auto-ptr,-modernize-replace-random-shuffle,-modernize-return-braced-init-list,-modernize-shrink-to-fit,-modernize-unary-static-assert,-modernize-use-auto,-modernize-use-bool-literals,-modernize-use-default-member-init,-modernize-use-emplace,-modernize-use-equals-default,-modernize-use-equals-delete,-modernize-use-noexcept,-modernize-use-nullptr,-modernize-use-override,-modernize-use-transparent-functors,-modernize-use-using,-mpi-buffer-deref,-mpi-type-mismatch,-objc-avoid-nserror-init,-objc-avoid-spinlock,-objc-forbidden-subclassing,-objc-property-declaration,-performance-faster-string-find,-performance-for-range-copy,-performance-implicit-conversion-in-loop,-performance-inefficient-algorithm,-performance-inefficient-string-concatenation,-performance-inefficient-vector-operation,-performance-move-const-arg,-performance-move-constructor-init,-performance-noexcept-move-constructor,-performance-type-promotion-in-math-fn,-performance-unnecessary-copy-initialization,-performance-unnecessary-value-param,-readability-avoid-const-params-in-decls,-readability-braces-around-statements,-readability-container-size-empty,-readability-delete-null-pointer,-readability-deleted-default,-readability-else-after-return,-readability-function-size,-readability-identifier-naming,-readability-implicit-bool-conversion,-readability-inconsistent-declaration-parameter-name,-readability-misleading-indentation,-readability-misplaced-array-index,-readability-named-parameter,-readability-non-const-parameter,-readability-redundant-control-flow,-readability-redundant-declaration,-readability-redundant-function-ptr-dereference,-readability-redundant-member-init,-readability-redundant-smartptr-get,-readability-redundant-string-cstr,-readability-redundant-string-init,-readability-simplify-boolean-expr,-readability-static-accessed-through-instance,-readability-static-definition-in-anonymous-namespace,-readability-uniqueptr-delete-release'  /home/eumakri/Documents/codechecker_dev_env/llvm/lib/Transforms/Scalar/LoopInstSimplify.cpp -- -Qunused-arguments -x c++ --target=x86_64-linux-gnu -DGTEST_HAS_RTTI=0 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/home/eumakri/Documents/codechecker_dev_env/build/lib/Transforms/Scalar -I/home/eumakri/Documents/codechecker_dev_env/llvm/lib/Transforms/Scalar -I/usr/include/libxml2 -I/home/eumakri/Documents/codechecker_dev_env/build/include -I/home/eumakri/Documents/codechecker_dev_env/llvm/include -fPIC -fvisibility-inlines-hidden -std=c++11 -Wno-unused-parameter -Wno-missing-field-initializers -Wno-long-long -Wno-maybe-uninitialized -Wno-comment -ffunction-sections -fdata-sections -O2 -fPIC -UNDEBUG -fno-exceptions -fno-rtti -nobuiltininc -isystem /home/eumakri/Documents/codechecker_dev_env/build/lib/clang/7.0.0/include -isystem /usr/include/c++/5 -isystem /usr/include/x86_64-linux-gnu/c++/5 -isystem /usr/include/c++/5/backward -isystem /usr/local/include -isystem /usr/include/x86_64-linux-gnu -isystem /usr/include

If you look closely, even though I said --enable mychecker, bugprone-integer-division, cert-dcl58-cpp, google-build-namespaces, google-global-names-in-headers and other various checkers are still enabled.

In the middle of the command:

misc-swapped-arguments,misc-throw-by-value-catch-by-reference,misc-throw-keyword-missing,misc-unconventional-assign-operator,misc-undelegated-constructor,misc-uniqueptr-reset-release,

only misc-throw-keyword-missing should be without a - in the whole checker list!

Szelethus commented 6 years ago

We later discovered that some checks are enables by default and they have to be disable with --disable default.