summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Lorenz <arphaman@gmail.com>2019-09-21 00:17:26 +0000
committerAlex Lorenz <arphaman@gmail.com>2019-09-21 00:17:26 +0000
commit69a791e52bc48b4e626b7d64bd81f3e34a6fd853 (patch)
tree08f783545023982191b3eef5115f4333fdad0112
parentc091e0e4ca6f7729fd7b08323a316ffa277171c2 (diff)
downloadclang-69a791e52bc48b4e626b7d64bd81f3e34a6fd853.tar.gz
[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
-rw-r--r--include/clang/Tooling/ArgumentsAdjusters.h4
-rw-r--r--lib/Tooling/ArgumentsAdjusters.cpp16
-rw-r--r--test/ClangScanDeps/Inputs/strip_diag_serialize.json7
-rw-r--r--test/ClangScanDeps/strip_diag_serialize.cpp11
-rw-r--r--tools/clang-scan-deps/ClangScanDeps.cpp2
5 files changed, 40 insertions, 0 deletions
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.