r345989 - [analyzer] New flag to print all -analyzer-config options
Galina Kistanova via cfe-commits
cfe-commits at lists.llvm.org
Fri Nov 2 11:38:37 PDT 2018
Also one of your resent commits added another broken test to the builder:
http://lab.llvm.org:8011/builders/llvm-clang-x86_64-expensive-checks-win/builds/13729
. . .
Failing Tests:
. . .
Clang-Unit ::
Frontend/./FrontendTests.exe/FrontendOutputTests.TestOutputStream
. . .
The builder did not send notifications on this.
Please have a look?
Thanks
Galina
On Fri, Nov 2, 2018 at 9:01 AM Kristof Umann via cfe-commits <
cfe-commits at lists.llvm.org> wrote:
> Author: szelethus
> Date: Fri Nov 2 08:59:37 2018
> New Revision: 345989
>
> URL: http://llvm.org/viewvc/llvm-project?rev=345989&view=rev
> Log:
> [analyzer] New flag to print all -analyzer-config options
>
> A new -cc1 flag is avaible for the said purpose: -analyzer-config-help
>
> Differential Revision: https://reviews.llvm.org/D53296
>
> Added:
> cfe/trunk/test/Analysis/analyzer-list-configs.c
> Modified:
> cfe/trunk/include/clang/Driver/CC1Options.td
> cfe/trunk/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h
> cfe/trunk/include/clang/StaticAnalyzer/Frontend/FrontendActions.h
> cfe/trunk/lib/Frontend/CompilerInvocation.cpp
> cfe/trunk/lib/FrontendTool/ExecuteCompilerInvocation.cpp
> cfe/trunk/lib/StaticAnalyzer/Frontend/CheckerRegistration.cpp
>
> Modified: cfe/trunk/include/clang/Driver/CC1Options.td
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/CC1Options.td?rev=345989&r1=345988&r2=345989&view=diff
>
> ==============================================================================
> --- cfe/trunk/include/clang/Driver/CC1Options.td (original)
> +++ cfe/trunk/include/clang/Driver/CC1Options.td Fri Nov 2 08:59:37 2018
> @@ -129,6 +129,9 @@ def analyzer_disable_all_checks : Flag<[
> def analyzer_checker_help : Flag<["-"], "analyzer-checker-help">,
> HelpText<"Display the list of analyzer checkers that are available">;
>
> +def analyzer_config_help : Flag<["-"], "analyzer-config-help">,
> + HelpText<"Display the list of -analyzer-config options">;
> +
> def analyzer_list_enabled_checkers : Flag<["-"],
> "analyzer-list-enabled-checkers">,
> HelpText<"Display the list of enabled analyzer checkers">;
>
>
> Modified: cfe/trunk/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h?rev=345989&r1=345988&r2=345989&view=diff
>
> ==============================================================================
> --- cfe/trunk/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h
> (original)
> +++ cfe/trunk/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h Fri Nov
> 2 08:59:37 2018
> @@ -175,6 +175,7 @@ public:
>
> unsigned ShowCheckerHelp : 1;
> unsigned ShowEnabledCheckerList : 1;
> + unsigned ShowConfigOptionsList : 1;
> unsigned AnalyzeAll : 1;
> unsigned AnalyzerDisplayProgress : 1;
> unsigned AnalyzeNestedBlocks : 1;
>
> Modified: cfe/trunk/include/clang/StaticAnalyzer/Frontend/FrontendActions.h
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/StaticAnalyzer/Frontend/FrontendActions.h?rev=345989&r1=345988&r2=345989&view=diff
>
> ==============================================================================
> --- cfe/trunk/include/clang/StaticAnalyzer/Frontend/FrontendActions.h
> (original)
> +++ cfe/trunk/include/clang/StaticAnalyzer/Frontend/FrontendActions.h Fri
> Nov 2 08:59:37 2018
> @@ -55,6 +55,7 @@ private:
> void printCheckerHelp(raw_ostream &OS, ArrayRef<std::string> plugins);
> void printEnabledCheckerList(raw_ostream &OS, ArrayRef<std::string>
> plugins,
> const AnalyzerOptions &opts);
> +void printAnalyzerConfigList(raw_ostream &OS);
>
> } // end GR namespace
>
>
> Modified: cfe/trunk/lib/Frontend/CompilerInvocation.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInvocation.cpp?rev=345989&r1=345988&r2=345989&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/Frontend/CompilerInvocation.cpp (original)
> +++ cfe/trunk/lib/Frontend/CompilerInvocation.cpp Fri Nov 2 08:59:37 2018
> @@ -279,6 +279,7 @@ static bool ParseAnalyzerArgs(AnalyzerOp
> }
>
> Opts.ShowCheckerHelp = Args.hasArg(OPT_analyzer_checker_help);
> + Opts.ShowConfigOptionsList = Args.hasArg(OPT_analyzer_config_help);
> Opts.ShowEnabledCheckerList =
> Args.hasArg(OPT_analyzer_list_enabled_checkers);
> Opts.DisableAllChecks = Args.hasArg(OPT_analyzer_disable_all_checks);
>
>
> Modified: cfe/trunk/lib/FrontendTool/ExecuteCompilerInvocation.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/FrontendTool/ExecuteCompilerInvocation.cpp?rev=345989&r1=345988&r2=345989&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/FrontendTool/ExecuteCompilerInvocation.cpp (original)
> +++ cfe/trunk/lib/FrontendTool/ExecuteCompilerInvocation.cpp Fri Nov 2
> 08:59:37 2018
> @@ -241,11 +241,19 @@ bool ExecuteCompilerInvocation(CompilerI
> ento::printCheckerHelp(llvm::outs(),
> Clang->getFrontendOpts().Plugins);
> return true;
> }
> +
> + // Honor -analyzer-list-enabled-checkers.
> if (Clang->getAnalyzerOpts()->ShowEnabledCheckerList) {
> ento::printEnabledCheckerList(llvm::outs(),
> Clang->getFrontendOpts().Plugins,
> *Clang->getAnalyzerOpts());
> }
> +
> + // Honor -analyzer-config-help.
> + if (Clang->getAnalyzerOpts()->ShowConfigOptionsList) {
> + ento::printAnalyzerConfigList(llvm::outs());
> + return true;
> + }
> #endif
>
> // If there were errors in processing arguments, don't do anything else.
>
> Modified: cfe/trunk/lib/StaticAnalyzer/Frontend/CheckerRegistration.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Frontend/CheckerRegistration.cpp?rev=345989&r1=345988&r2=345989&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/StaticAnalyzer/Frontend/CheckerRegistration.cpp
> (original)
> +++ cfe/trunk/lib/StaticAnalyzer/Frontend/CheckerRegistration.cpp Fri Nov
> 2 08:59:37 2018
> @@ -22,6 +22,7 @@
> #include "clang/StaticAnalyzer/Frontend/FrontendActions.h"
> #include "llvm/ADT/SmallVector.h"
> #include "llvm/Support/DynamicLibrary.h"
> +#include "llvm/Support/FormattedStream.h"
> #include "llvm/Support/Path.h"
> #include "llvm/Support/raw_ostream.h"
> #include <memory>
> @@ -157,3 +158,74 @@ void ento::printEnabledCheckerList(raw_o
> SmallVector<CheckerOptInfo, 8> checkerOpts = getCheckerOptList(opts);
> ClangCheckerRegistry(plugins).printList(out, checkerOpts);
> }
> +
> +void ento::printAnalyzerConfigList(raw_ostream &out) {
> + out << "OVERVIEW: Clang Static Analyzer -analyzer-config Option
> List\n\n";
> + out << "USAGE: clang -cc1 [CLANG_OPTIONS] -analyzer-config "
> +
> "<OPTION1=VALUE,OPTION2=VALUE,...>\n\n";
> + out << " clang -cc1 [CLANG_OPTIONS] -analyzer-config
> OPTION1=VALUE, "
> + "-analyzer-config OPTION2=VALUE,
> ...\n\n";
> + out << " clang [CLANG_OPTIONS] -Xclang -analyzer-config -Xclang"
> +
> "<OPTION1=VALUE,OPTION2=VALUE,...>\n\n";
> + out << " clang [CLANG_OPTIONS] -Xclang -analyzer-config -Xclang "
> + "OPTION1=VALUE, -Xclang -analyzer-config
> -Xclang "
> + "OPTION2=VALUE, ...\n\n";
> + out << "OPTIONS:\n\n";
> +
> + using OptionAndDescriptionTy = std::pair<StringRef, std::string>;
> + OptionAndDescriptionTy PrintableOptions[] = {
> +#define ANALYZER_OPTION(TYPE, NAME, CMDFLAG, DESC, DEFAULT_VAL)
> \
> + {
> \
> + CMDFLAG,
> \
> + llvm::Twine(llvm::Twine() + "(" +
> \
> + (#TYPE == "StringRef" ? "string" : #TYPE ) + ") " DESC
> \
> + " (default: " #DEFAULT_VAL ")").str()
> \
> + },
> +
> +#define ANALYZER_OPTION_DEPENDS_ON_USER_MODE(TYPE, NAME, CMDFLAG, DESC,
> \
> + SHALLOW_VAL, DEEP_VAL)
> \
> + {
> \
> + CMDFLAG,
> \
> + llvm::Twine(llvm::Twine() + "(" +
> \
> + (#TYPE == "StringRef" ? "string" : #TYPE ) + ") " DESC
> \
> + " (default: " #SHALLOW_VAL " in shallow mode, "
> #DEEP_VAL \
> + " in deep mode)").str()
> \
> + },
> +#include "clang/StaticAnalyzer/Core/AnalyzerOptions.def"
> +#undef ANALYZER_OPTION
> +#undef ANALYZER_OPTION_DEPENDS_ON_USER_MODE
> + };
> +
> + llvm::sort(PrintableOptions, [](const OptionAndDescriptionTy &LHS,
> + const OptionAndDescriptionTy &RHS) {
> + return LHS.first < RHS.first;
> + });
> +
> + constexpr size_t MinLineWidth = 70;
> + constexpr size_t PadForOpt = 2;
> + constexpr size_t OptionWidth = 30;
> + constexpr size_t PadForDesc = PadForOpt + OptionWidth;
> + static_assert(MinLineWidth > PadForDesc, "MinLineWidth must be
> greater!");
> +
> + llvm::formatted_raw_ostream FOut(out);
> +
> + for (const auto &Pair : PrintableOptions) {
> + FOut.PadToColumn(PadForOpt) << Pair.first;
> +
> + // If the buffer's length is greater then PadForDesc, print a newline.
> + if (FOut.getColumn() > PadForDesc)
> + FOut << '\n';
> +
> + FOut.PadToColumn(PadForDesc);
> +
> + for (char C : Pair.second) {
> + if (FOut.getColumn() > MinLineWidth && C == ' ') {
> + FOut << '\n';
> + FOut.PadToColumn(PadForDesc);
> + continue;
> + }
> + FOut << C;
> + }
> + FOut << "\n\n";
> + }
> +}
>
> Added: cfe/trunk/test/Analysis/analyzer-list-configs.c
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/analyzer-list-configs.c?rev=345989&view=auto
>
> ==============================================================================
> --- cfe/trunk/test/Analysis/analyzer-list-configs.c (added)
> +++ cfe/trunk/test/Analysis/analyzer-list-configs.c Fri Nov 2 08:59:37
> 2018
> @@ -0,0 +1,33 @@
> +// RUN: %clang_cc1 -analyzer-config-help 2>&1 | FileCheck %s
> +// CHECK: OVERVIEW: Clang Static Analyzer -analyzer-config Option List
> +//
> +// CHECK: USAGE: clang -cc1 [CLANG_OPTIONS] -analyzer-config
> <OPTION1=VALUE,OPTION2=VALUE,...>
> +//
> +// CHCEK: clang -cc1 [CLANG_OPTIONS] -analyzer-config OPTION1=VALUE,
> -analyzer-config OPTION2=VALUE, ...
> +//
> +// CHECK: clang [CLANG_OPTIONS] -Xclang -analyzer-config
> -Xclang<OPTION1=VALUE,OPTION2=VALUE,...>
> +//
> +// CHECK: clang [CLANG_OPTIONS] -Xclang -analyzer-config -Xclang
> OPTION1=VALUE, -Xclang -analyzer-config -Xclang OPTION2=VALUE, ...
> +//
> +//
> +// CHECK: OPTIONS:
> +//
> +// CHECK: aggressive-binary-operation-simplification
> +// CHECK: (bool) Whether SValBuilder should rearrange
> +// CHECK: comparisons and additive operations of
> symbolic
> +// CHECK: expressions which consist of a sum of a
> +// CHECK: symbol and a concrete integer into the format
> +// CHECK: where symbols are on the left-hand side
> +// CHECK: and the integer is on the right. This is
> +// CHECK: only done if both symbols and both concrete
> +// CHECK: integers are signed, greater than or equal
> +// CHECK: to the quarter of the minimum value of the
> +// CHECK: type and less than or equal to the quarter
> +// CHECK: of the maximum value of that type. A + n
> +// CHECK: <OP> B + m becomes A - B <OP> m - n, where
> +// CHECK: A and B symbolic, n and m are integers.
> +// CHECK: <OP> is any of '==', '!=', '<', '<=', '>',
> +// CHECK: '>=', '+' or '-'. The rearrangement also
> +// CHECK: happens with '-' instead of '+' on either
> +// CHECK: or both side and also if any or both integers
> +// CHECK: are missing. (default: false)
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20181102/1f09c31d/attachment-0001.html>
More information about the cfe-commits
mailing list