From: Yuka Takahashi Date: Wed, 23 Aug 2017 13:39:47 +0000 (+0000) Subject: [Bash-autocompletion] Add support for static analyzer flags X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ecfb2759da6ef7888552ecd02346a8a05a362fc8;p=clang [Bash-autocompletion] Add support for static analyzer flags Summary: This is a patch for clang autocomplete feature. It will collect values which -analyzer-checker takes, which is defined in clang/StaticAnalyzer/Checkers/Checkers.inc, dynamically. First, from ValuesCode class in Options.td, TableGen will generate C++ code in Options.inc. Options.inc will be included in DriverOptions.cpp, and calls OptTable's addValues function. addValues function will add second argument to Option's Values class. Values contains string like "foo,bar,.." which is handed to Values class in OptTable. Reviewers: v.g.vassilev, teemperor, ruiu Subscribers: hiraditya, cfe-commits Differential Revision: https://reviews.llvm.org/D36782 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@311552 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Driver/CC1Options.td b/include/clang/Driver/CC1Options.td index c53d7a9136..74e4fb60ee 100644 --- a/include/clang/Driver/CC1Options.td +++ b/include/clang/Driver/CC1Options.td @@ -99,7 +99,19 @@ def analyzer_stats : Flag<["-"], "analyzer-stats">, HelpText<"Print internal analyzer statistics.">; def analyzer_checker : Separate<["-"], "analyzer-checker">, - HelpText<"Choose analyzer checkers to enable">; + HelpText<"Choose analyzer checkers to enable">, + ValuesCode<[{ + const char *Values = + #define GET_CHECKERS + #define CHECKER(FULLNAME, CLASS, DESCFILE, HT, G, H) FULLNAME "," + #include "clang/StaticAnalyzer/Checkers/Checkers.inc" + #undef GET_CHECKERS + #define GET_PACKAGES + #define PACKAGE(FULLNAME, G, D) FULLNAME "," + #include "clang/StaticAnalyzer/Checkers/Checkers.inc" + #undef GET_PACKAGES + ; + }]>; def analyzer_checker_EQ : Joined<["-"], "analyzer-checker=">, Alias; diff --git a/lib/Driver/DriverOptions.cpp b/lib/Driver/DriverOptions.cpp index ac63b96cf9..11e7e4c8fe 100644 --- a/lib/Driver/DriverOptions.cpp +++ b/lib/Driver/DriverOptions.cpp @@ -11,6 +11,7 @@ #include "llvm/ADT/STLExtras.h" #include "llvm/Option/OptTable.h" #include "llvm/Option/Option.h" +#include using namespace clang::driver; using namespace clang::driver::options; @@ -40,5 +41,13 @@ public: } std::unique_ptr clang::driver::createDriverOptTable() { - return llvm::make_unique(); + auto Result = llvm::make_unique(); + // Options.inc is included in DriverOptions.cpp, and calls OptTable's + // addValues function. + // Opt is a variable used in the code fragment in Options.inc. + OptTable &Opt = *Result; +#define OPTTABLE_ARG_INIT +#include "clang/Driver/Options.inc" +#undef OPTTABLE_ARG_INIT + return std::move(Result); } diff --git a/test/Driver/autocomplete.c b/test/Driver/autocomplete.c index 5680801a64..06e700f1ac 100644 --- a/test/Driver/autocomplete.c +++ b/test/Driver/autocomplete.c @@ -93,3 +93,5 @@ // WARNING-NEXT: -Wmax-unsigned-zero // RUN: %clang --autocomplete=-Wno-invalid-pp- | FileCheck %s -check-prefix=NOWARNING // NOWARNING: -Wno-invalid-pp-token +// RUN: %clang --autocomplete=-analyzer-checker, | FileCheck %s -check-prefix=ANALYZER +// ANALYZER: unix.Malloc