Author: Jan Svoboda Date: 2021-09-10T14:47:21+02:00 New Revision: 993f60ae32de001ac9ac1ff512f2adf339e265c8
URL: https://github.com/llvm/llvm-project/commit/993f60ae32de001ac9ac1ff512f2adf339e265c8 DIFF: https://github.com/llvm/llvm-project/commit/993f60ae32de001ac9ac1ff512f2adf339e265c8.diff LOG: [clang][deps] Sanitize both instances of DiagnosticOptions During dependency scanning, we generally want to suppress -Werror. Apply the same logic to the DiagnosticOptions instance used for command-line parsing. This fixes a test failure on the PS4 bot, where the system header directory could not be found, which was reported due to -Werror being on the command line and not being sanitized. Added: Modified: clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp clang/test/ClangScanDeps/error.cpp Removed: ################################################################################ diff --git a/clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp b/clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp index faf7d36bf87b8..e4d49756ce6b4 100644 --- a/clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp +++ b/clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp @@ -133,6 +133,16 @@ deduceDepTarget(const std::string &OutputFile, return makeObjFileName(InputFiles.front().getFile()); } +/// Sanitize diagnostic options for dependency scan. +static void sanitizeDiagOpts(DiagnosticOptions &DiagOpts) { + // Don't print 'X warnings and Y errors generated'. + DiagOpts.ShowCarets = false; + // Don't write out diagnostic file. + DiagOpts.DiagnosticSerializationFile.clear(); + // Don't treat warnings as errors. + DiagOpts.Warnings.push_back("no-error"); +} + /// A clang tool that runs the preprocessor in a mode that's optimized for /// dependency scanning for the given compiler invocation. class DependencyScanningAction : public tooling::ToolAction { @@ -157,13 +167,8 @@ class DependencyScanningAction : public tooling::ToolAction { CompilerInstance Compiler(std::move(PCHContainerOps)); Compiler.setInvocation(std::move(Invocation)); - // Don't print 'X warnings and Y errors generated'. - Compiler.getDiagnosticOpts().ShowCarets = false; - // Don't write out diagnostic file. - Compiler.getDiagnosticOpts().DiagnosticSerializationFile.clear(); - // Don't treat warnings as errors. - Compiler.getDiagnosticOpts().Warnings.push_back("no-error"); // Create the compiler's actual diagnostics engine. + sanitizeDiagOpts(Compiler.getDiagnosticOpts()); Compiler.createDiagnostics(DiagConsumer, /*ShouldOwnClient=*/false); if (!Compiler.hasDiagnostics()) return false; @@ -304,8 +309,7 @@ static llvm::Error runWithDiags(DiagnosticOptions *DiagOpts, llvm::function_ref<bool(DiagnosticConsumer &, DiagnosticOptions &)> BodyShouldSucceed) { - // Avoid serializing diagnostics. - DiagOpts->DiagnosticSerializationFile.clear(); + sanitizeDiagOpts(*DiagOpts); // Capture the emitted diagnostics and report them to the client // in the case of a failure. diff --git a/clang/test/ClangScanDeps/error.cpp b/clang/test/ClangScanDeps/error.cpp index e18bf302af26f..d94ba4c03e508 100644 --- a/clang/test/ClangScanDeps/error.cpp +++ b/clang/test/ClangScanDeps/error.cpp @@ -21,10 +21,6 @@ // CHECK-NEXT: error: // CHECK-NEXT: Error while scanning dependencies // CHECK-NEXT: fatal error: 'missing.h' file not found -// CHECK-NEXT: "missing.h" -// CHECK-NEXT: ^ // CHECK-NEXT: Error while scanning dependencies // CHECK-NEXT: fatal error: 'missing.h' file not found -// CHECK-NEXT: "missing.h" -// CHECK-NEXT: ^ // CHECK-NEXT: EOF _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits