diff --git a/clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp b/clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp --- a/clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp +++ b/clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp @@ -135,8 +135,8 @@ DiagOpts.ShowCarets = false; // Don't write out diagnostic file. DiagOpts.DiagnosticSerializationFile.clear(); - // Don't treat warnings as errors. - DiagOpts.Warnings.push_back("no-error"); + // Don't emit warnings as errors (and all other warnings too). + DiagOpts.IgnoreWarnings = true; } /// A clang tool that runs the preprocessor in a mode that's optimized for diff --git a/clang/test/ClangScanDeps/diagnostic-pragmas.c b/clang/test/ClangScanDeps/diagnostic-pragmas.c new file mode 100644 --- /dev/null +++ b/clang/test/ClangScanDeps/diagnostic-pragmas.c @@ -0,0 +1,35 @@ +// Test scanning deps does not have more errors than the regular compilation. + +// RUN: rm -rf %t +// RUN: split-file %s %t +// RUN: sed "s|DIR|%/t|g" %t/cdb.json.template > %t/cdb.json + +// Check the regular compilation does not fail. +// RUN: %clang -fsyntax-only %t/test.c -I %t/include -fmodules -fimplicit-module-maps -fmodules-cache-path=%t/cache -Wnon-modular-include-in-module -Werror=non-modular-include-in-module + +// And now scanning deps should succeed too. +// RUN: clang-scan-deps -compilation-database %t/cdb.json -j 1 + +//--- cdb.json.template +[ + { + "directory": "DIR", + "command": "clang -fsyntax-only DIR/test.c -I DIR/include -fmodules -fimplicit-module-maps -fmodules-cache-path=DIR/cache -Wnon-modular-include-in-module -Werror=non-modular-include-in-module", + "file": "DIR/test.c" + }, +] + +//--- include/nonmodular.h +// empty + +//--- include/modular-includer.h +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wnon-modular-include-in-module" +#include +#pragma clang diagnostic pop + +//--- include/module.modulemap +module ModularIncluder { header "modular-includer.h" } + +//--- test.c +#include