Skip to content

Commit

Permalink
[clang] Allow clang-check to customize analyzer output file or dir name
Browse files Browse the repository at this point in the history
Required by https://stackoverflow.com/questions/58073606

As the output argument is stripped out in the clang-check tool, it seems impossible for clang-check users to customize the output file name, even with -extra-args and -extra-arg-before.

This patch adds the -analyzer-output-path argument to allow users to adjust the output name. And if the argument is not set or the analyzer is not enabled, the original strip output adjuster will remove the output arguments.

Differential Revision: https://reviews.llvm.org/D97265
  • Loading branch information
Snape3058 authored and kirillbobyrev committed Nov 15, 2021
1 parent 677df8c commit da168dd
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 1 deletion.
14 changes: 14 additions & 0 deletions clang/test/Tooling/clang-check-set-analyzer-output-path.cpp
@@ -0,0 +1,14 @@
// 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: echo '// CHECK: {{qwerty}}' > %t/cclog-check
// RUN: clang-check -p "%t" "%t/test.cpp" -analyze -analyzer-output-path=%t/qwerty -extra-arg=-v -extra-arg=-Xclang -extra-arg=-verify 2>&1 | FileCheck %t/cclog-check
// RUN: FileCheck %s --input-file=%t/qwerty

// CHECK: DOCTYPE plist
// CHECK: Division by zero
int f() {
return 1 / 0; // expected-warning {{Division by zero}}
}
18 changes: 17 additions & 1 deletion clang/tools/clang-check/ClangCheck.cpp
Expand Up @@ -76,6 +76,10 @@ static cl::opt<bool>
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)),
Expand Down Expand Up @@ -206,7 +210,19 @@ int main(int argc, const char **argv) {

// 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
Expand Down

0 comments on commit da168dd

Please sign in to comment.