jansvoboda11 created this revision. jansvoboda11 added reviewers: Bigcheese, dexonsmith, arphaman. jansvoboda11 requested review of this revision. Herald added a project: clang. Herald added a subscriber: cfe-commits.
To prevent the creation of diagnostics file, `clang-scan-deps` strips the corresponding command-line argument. This behavior is useful even when using the C++ `DependencyScanner` library. This patch transforms stripping of command-line in `clang-scan-deps` into stripping of `CompilerInvocation` in `DependencyScanning`. AFAIK, the `clang-cl` driver doesn't even accept `--serialize-diagnostics`, so I've removed the test. (It would fail with an unknown command-line argument otherwise.) Note: Since we're generating the command-line for modules from `CompilerInvocation`, the `--serialize-diagnostics` argument won't be generated. This of course happened in `clang-scan-deps` even before this patch, but not in the `DependencyScanning` library. This will be resolved in a future patch. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D104012 Files: clang/include/clang/Tooling/ArgumentsAdjusters.h clang/lib/Tooling/ArgumentsAdjusters.cpp clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp clang/test/ClangScanDeps/Inputs/strip_diag_serialize.json clang/test/ClangScanDeps/strip_diag_serialize.cpp clang/tools/clang-scan-deps/ClangScanDeps.cpp Index: clang/tools/clang-scan-deps/ClangScanDeps.cpp =================================================================== --- clang/tools/clang-scan-deps/ClangScanDeps.cpp +++ clang/tools/clang-scan-deps/ClangScanDeps.cpp @@ -570,8 +570,6 @@ AdjustedArgs.insert(AdjustedArgs.end(), FlagsEnd, Args.end()); return AdjustedArgs; }); - AdjustingCompilations->appendArgumentsAdjuster( - tooling::getClangStripSerializeDiagnosticAdjuster()); SharedStream Errs(llvm::errs()); // Print out the dependency results to STDOUT by default. Index: clang/test/ClangScanDeps/strip_diag_serialize.cpp =================================================================== --- clang/test/ClangScanDeps/strip_diag_serialize.cpp +++ clang/test/ClangScanDeps/strip_diag_serialize.cpp @@ -8,6 +8,5 @@ // RUN: clang-scan-deps -compilation-database %t.cdb -j 1 2>&1 | FileCheck %s // CHECK-NOT: unable to open file // CHECK: strip_diag_serialize_input.cpp -// CHECK: strip_diag_serialize_input_clangcl.cpp #warning "diagnostic" Index: clang/test/ClangScanDeps/Inputs/strip_diag_serialize.json =================================================================== --- clang/test/ClangScanDeps/Inputs/strip_diag_serialize.json +++ clang/test/ClangScanDeps/Inputs/strip_diag_serialize.json @@ -3,10 +3,5 @@ "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" -}, -{ - "directory": "DIR", - "command": "clang-cl /E --serialize-diagnostics A:/does/not/exist -- DIR/strip_diag_serialize_input_clangcl.cpp", - "file": "DIR/strip_diag_serialize_input_clangcl.cpp" } ] Index: clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp =================================================================== --- clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp +++ clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp @@ -85,6 +85,8 @@ // Don't print 'X warnings and Y errors generated'. Compiler.getDiagnosticOpts().ShowCarets = false; + // Don't write out diagnostic file. + Compiler.getDiagnosticOpts().DiagnosticSerializationFile.clear(); // Create the compiler's actual diagnostics engine. Compiler.createDiagnostics(DiagConsumer, /*ShouldOwnClient=*/false); if (!Compiler.hasDiagnostics()) Index: clang/lib/Tooling/ArgumentsAdjusters.cpp =================================================================== --- clang/lib/Tooling/ArgumentsAdjusters.cpp +++ clang/lib/Tooling/ArgumentsAdjusters.cpp @@ -86,22 +86,6 @@ }; } -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*/) { auto UsingClDriver = (getDriverMode(Args) == "cl"); Index: clang/include/clang/Tooling/ArgumentsAdjusters.h =================================================================== --- clang/include/clang/Tooling/ArgumentsAdjusters.h +++ clang/include/clang/Tooling/ArgumentsAdjusters.h @@ -43,10 +43,6 @@ /// 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();
Index: clang/tools/clang-scan-deps/ClangScanDeps.cpp =================================================================== --- clang/tools/clang-scan-deps/ClangScanDeps.cpp +++ clang/tools/clang-scan-deps/ClangScanDeps.cpp @@ -570,8 +570,6 @@ AdjustedArgs.insert(AdjustedArgs.end(), FlagsEnd, Args.end()); return AdjustedArgs; }); - AdjustingCompilations->appendArgumentsAdjuster( - tooling::getClangStripSerializeDiagnosticAdjuster()); SharedStream Errs(llvm::errs()); // Print out the dependency results to STDOUT by default. Index: clang/test/ClangScanDeps/strip_diag_serialize.cpp =================================================================== --- clang/test/ClangScanDeps/strip_diag_serialize.cpp +++ clang/test/ClangScanDeps/strip_diag_serialize.cpp @@ -8,6 +8,5 @@ // RUN: clang-scan-deps -compilation-database %t.cdb -j 1 2>&1 | FileCheck %s // CHECK-NOT: unable to open file // CHECK: strip_diag_serialize_input.cpp -// CHECK: strip_diag_serialize_input_clangcl.cpp #warning "diagnostic" Index: clang/test/ClangScanDeps/Inputs/strip_diag_serialize.json =================================================================== --- clang/test/ClangScanDeps/Inputs/strip_diag_serialize.json +++ clang/test/ClangScanDeps/Inputs/strip_diag_serialize.json @@ -3,10 +3,5 @@ "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" -}, -{ - "directory": "DIR", - "command": "clang-cl /E --serialize-diagnostics A:/does/not/exist -- DIR/strip_diag_serialize_input_clangcl.cpp", - "file": "DIR/strip_diag_serialize_input_clangcl.cpp" } ] Index: clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp =================================================================== --- clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp +++ clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp @@ -85,6 +85,8 @@ // Don't print 'X warnings and Y errors generated'. Compiler.getDiagnosticOpts().ShowCarets = false; + // Don't write out diagnostic file. + Compiler.getDiagnosticOpts().DiagnosticSerializationFile.clear(); // Create the compiler's actual diagnostics engine. Compiler.createDiagnostics(DiagConsumer, /*ShouldOwnClient=*/false); if (!Compiler.hasDiagnostics()) Index: clang/lib/Tooling/ArgumentsAdjusters.cpp =================================================================== --- clang/lib/Tooling/ArgumentsAdjusters.cpp +++ clang/lib/Tooling/ArgumentsAdjusters.cpp @@ -86,22 +86,6 @@ }; } -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*/) { auto UsingClDriver = (getDriverMode(Args) == "cl"); Index: clang/include/clang/Tooling/ArgumentsAdjusters.h =================================================================== --- clang/include/clang/Tooling/ArgumentsAdjusters.h +++ clang/include/clang/Tooling/ArgumentsAdjusters.h @@ -43,10 +43,6 @@ /// 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();
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits