r345989 - [analyzer] New flag to print all -analyzer-config options

Ilya Biryukov via cfe-commits cfe-commits at lists.llvm.org
Mon Nov 5 02:08:05 PST 2018


Should be fixed in r346123.
+Kadir Çetinkaya <kadircet at google.com> who authored the fix.

On Fri, Nov 2, 2018 at 7:38 PM Galina Kistanova via cfe-commits <
cfe-commits at lists.llvm.org> wrote:

> 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
>>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>


-- 
Regards,
Ilya Biryukov
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20181105/cbdee383/attachment-0001.html>


More information about the cfe-commits mailing list