[PATCH] D97265: [clang] Allow clang-check to customize analyzer output file or dir name
Ella Ma via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Mar 4 23:04:53 PST 2021
OikawaKirie updated this revision to Diff 328396.
OikawaKirie retitled this revision from "[clang] Allow clang-check to customize output file name" to "[clang] Allow clang-check to customize analyzer output file or dir name".
OikawaKirie edited the summary of this revision.
OikawaKirie added a comment.
Herald added subscribers: steakhal, ASDenysPetrov, dkrupp, donat.nagy, Szelethus, a.sidorin, baloghadamsoftware.
1. Update option name from `-output` to `-analyzer-output-path`. As it can either be a file name or a directory name, the word `path` may not be accurate. Please give me your suggestions on this option name.
2. Add more verifications on the output files, rather than verifying the value of the `-o` option. For simplicity, the regression test case only checks the plist format.
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D97265/new/
https://reviews.llvm.org/D97265
Files:
clang/test/Tooling/clang-check-set-analyzer-output-path.cpp
clang/tools/clang-check/ClangCheck.cpp
Index: clang/tools/clang-check/ClangCheck.cpp
===================================================================
--- clang/tools/clang-check/ClangCheck.cpp
+++ clang/tools/clang-check/ClangCheck.cpp
@@ -76,7 +76,10 @@
Analyze("analyze",
cl::desc(Options.getOptionHelpText(options::OPT_analyze)),
cl::cat(ClangCheckCategory));
-
+static cl::opt<std::string>
+ AnalyzerOutput("analyzer-output-path",
+ cl::desc(Options.getOptionHelpText(options::OPT_o)),
+ cl::cat(ClangCheckCategory));
static cl::opt<bool>
Fixit("fixit", cl::desc(Options.getOptionHelpText(options::OPT_fixit)),
cl::cat(ClangCheckCategory));
@@ -206,7 +209,19 @@
// Clear adjusters because -fsyntax-only is inserted by the default chain.
Tool.clearArgumentsAdjusters();
- Tool.appendArgumentsAdjuster(getClangStripOutputAdjuster());
+
+ // Reset output path if is provided by user.
+ Tool.appendArgumentsAdjuster(
+ Analyze ? [&](const CommandLineArguments &Args, StringRef File) {
+ auto Ret = getClangStripOutputAdjuster()(Args, File);
+ if (!AnalyzerOutput.empty()) {
+ Ret.emplace_back("-o");
+ Ret.emplace_back(AnalyzerOutput);
+ }
+ return Ret;
+ }
+ : getClangStripOutputAdjuster());
+
Tool.appendArgumentsAdjuster(getClangStripDependencyFileAdjuster());
// Running the analyzer requires --analyze. Other modes can work with the
Index: clang/test/Tooling/clang-check-set-analyzer-output-path.cpp
===================================================================
--- /dev/null
+++ clang/test/Tooling/clang-check-set-analyzer-output-path.cpp
@@ -0,0 +1,15 @@
+// RUN: rm -rf %t
+// RUN: mkdir %t
+// RUN: cd %t
+// RUN: echo '[{"directory":".","command":"clang++ -c %t/test.cpp -o foo -ofoo","file":"%t/test.cpp"}]' | sed -e 's/\\/\//g' > %t/compile_commands.json
+// RUN: cp "%s" "%t/test.cpp"
+// RUN: clang-check -p "%t" "%t/test.cpp" -analyze -analyzer-output-path=qwerty -extra-arg=-v -extra-arg=-Xclang -extra-arg=-verify 2>&1 | cat - qwerty | FileCheck %s
+// FIXME: Make the above easier.
+
+// CHECK: Invocation
+// CHECK: {{qwerty}}
+// CHECK: DOCTYPE plist
+// CHECK: Division by zero
+int f() {
+ return 1 / 0; // expected-warning {{Division by zero}}
+}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D97265.328396.patch
Type: text/x-patch
Size: 2387 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20210305/30f697b2/attachment-0001.bin>
More information about the cfe-commits
mailing list