From 69a791e52bc48b4e626b7d64bd81f3e34a6fd853 Mon Sep 17 00:00:00 2001 From: Alex Lorenz Date: Sat, 21 Sep 2019 00:17:26 +0000 Subject: [clang-scan-deps] strip the --serialize-diagnostics argument This ensures that clang-scan-deps won't write out diagnostics when scanning dependencies. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@372444 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/Tooling/ArgumentsAdjusters.h | 4 ++++ lib/Tooling/ArgumentsAdjusters.cpp | 16 ++++++++++++++++ test/ClangScanDeps/Inputs/strip_diag_serialize.json | 7 +++++++ test/ClangScanDeps/strip_diag_serialize.cpp | 11 +++++++++++ tools/clang-scan-deps/ClangScanDeps.cpp | 2 ++ 5 files changed, 40 insertions(+) create mode 100644 test/ClangScanDeps/Inputs/strip_diag_serialize.json create mode 100644 test/ClangScanDeps/strip_diag_serialize.cpp diff --git a/include/clang/Tooling/ArgumentsAdjusters.h b/include/clang/Tooling/ArgumentsAdjusters.h index bf08860343..c48a8725aa 100644 --- a/include/clang/Tooling/ArgumentsAdjusters.h +++ b/include/clang/Tooling/ArgumentsAdjusters.h @@ -43,6 +43,10 @@ ArgumentsAdjuster getClangSyntaxOnlyAdjuster(); /// arguments. ArgumentsAdjuster getClangStripOutputAdjuster(); +/// Gets an argument adjuster which removes command line arguments related to +/// diagnostic serialization. +ArgumentsAdjuster getClangStripSerializeDiagnosticAdjuster(); + /// Gets an argument adjuster which removes dependency-file /// related command line arguments. ArgumentsAdjuster getClangStripDependencyFileAdjuster(); diff --git a/lib/Tooling/ArgumentsAdjusters.cpp b/lib/Tooling/ArgumentsAdjusters.cpp index 942b35df45..f56d08c47b 100644 --- a/lib/Tooling/ArgumentsAdjusters.cpp +++ b/lib/Tooling/ArgumentsAdjusters.cpp @@ -57,6 +57,22 @@ ArgumentsAdjuster getClangStripOutputAdjuster() { }; } +ArgumentsAdjuster getClangStripSerializeDiagnosticAdjuster() { + return [](const CommandLineArguments &Args, StringRef /*unused*/) { + CommandLineArguments AdjustedArgs; + for (size_t i = 0, e = Args.size(); i < e; ++i) { + StringRef Arg = Args[i]; + if (Arg == "--serialize-diagnostics") { + // Skip the diagnostic output argument. + ++i; + continue; + } + AdjustedArgs.push_back(Args[i]); + } + return AdjustedArgs; + }; +} + ArgumentsAdjuster getClangStripDependencyFileAdjuster() { return [](const CommandLineArguments &Args, StringRef /*unused*/) { CommandLineArguments AdjustedArgs; diff --git a/test/ClangScanDeps/Inputs/strip_diag_serialize.json b/test/ClangScanDeps/Inputs/strip_diag_serialize.json new file mode 100644 index 0000000000..a774d95a3b --- /dev/null +++ b/test/ClangScanDeps/Inputs/strip_diag_serialize.json @@ -0,0 +1,7 @@ +[ +{ + "directory": "DIR", + "command": "clang -E -fsyntax-only DIR/strip_diag_serialize_input.cpp --serialize-diagnostics /does/not/exist", + "file": "DIR/strip_diag_serialize_input.cpp" +} +] diff --git a/test/ClangScanDeps/strip_diag_serialize.cpp b/test/ClangScanDeps/strip_diag_serialize.cpp new file mode 100644 index 0000000000..ec62e75134 --- /dev/null +++ b/test/ClangScanDeps/strip_diag_serialize.cpp @@ -0,0 +1,11 @@ +// RUN: rm -rf %t.dir +// RUN: rm -rf %t.cdb +// RUN: mkdir -p %t.dir +// RUN: cp %s %t.dir/strip_diag_serialize_input.cpp +// RUN: sed -e "s|DIR|%/t.dir|g" %S/Inputs/strip_diag_serialize.json > %t.cdb +// +// RUN: clang-scan-deps -compilation-database %t.cdb 2>&1 | FileCheck %s +// CHECK-NOT: unable to open file +// CHECK: strip_diag_serialize_input.cpp + +#warning "diagnostic" diff --git a/tools/clang-scan-deps/ClangScanDeps.cpp b/tools/clang-scan-deps/ClangScanDeps.cpp index ebb42c0346..d44e3b9ff3 100644 --- a/tools/clang-scan-deps/ClangScanDeps.cpp +++ b/tools/clang-scan-deps/ClangScanDeps.cpp @@ -266,6 +266,8 @@ int main(int argc, const char **argv) { AdjustedArgs.push_back("-Wno-error"); return AdjustedArgs; }); + AdjustingCompilations->appendArgumentsAdjuster( + tooling::getClangStripSerializeDiagnosticAdjuster()); SharedStream Errs(llvm::errs()); // Print out the dependency results to STDOUT by default. -- cgit v1.2.1