diff --git a/clang/lib/CrossTU/CrossTranslationUnit.cpp b/clang/lib/CrossTU/CrossTranslationUnit.cpp index fb2a79ab657db..96e28fb10284f 100644 --- a/clang/lib/CrossTU/CrossTranslationUnit.cpp +++ b/clang/lib/CrossTU/CrossTranslationUnit.cpp @@ -13,6 +13,7 @@ #include "clang/AST/ASTImporter.h" #include "clang/AST/Decl.h" #include "clang/AST/ParentMapContext.h" +#include "clang/Basic/DiagnosticDriver.h" #include "clang/Basic/TargetInfo.h" #include "clang/CrossTU/CrossTUDiagnostic.h" #include "clang/Frontend/ASTUnit.h" @@ -237,7 +238,16 @@ template static bool hasBodyOrInit(const T *D) { } CrossTranslationUnitContext::CrossTranslationUnitContext(CompilerInstance &CI) - : Context(CI.getASTContext()), ASTStorage(CI) {} + : Context(CI.getASTContext()), ASTStorage(CI) { + if (CI.getAnalyzerOpts().ShouldEmitErrorsOnInvalidConfigValue && + !CI.getAnalyzerOpts().CTUDir.empty()) { + auto S = CI.getVirtualFileSystem().status(CI.getAnalyzerOpts().CTUDir); + if (!S || S->getType() != llvm::sys::fs::file_type::directory_file) + CI.getDiagnostics().Report(diag::err_analyzer_config_invalid_input) + << "ctu-dir" + << "a filename"; + } +} CrossTranslationUnitContext::~CrossTranslationUnitContext() {} diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp index 3c301debb9503..f8fecbaf40267 100644 --- a/clang/lib/Frontend/CompilerInvocation.cpp +++ b/clang/lib/Frontend/CompilerInvocation.cpp @@ -1322,10 +1322,6 @@ static void parseAnalyzerConfigs(AnalyzerOptions &AnOpts, if (AnOpts.ShouldTrackConditionsDebug && !AnOpts.ShouldTrackConditions) Diags->Report(diag::err_analyzer_config_invalid_input) << "track-conditions-debug" << "'track-conditions' to also be enabled"; - - if (!AnOpts.CTUDir.empty() && !llvm::sys::fs::is_directory(AnOpts.CTUDir)) - Diags->Report(diag::err_analyzer_config_invalid_input) << "ctu-dir" - << "a filename"; } /// Generate a remark argument. This is an inverse of `ParseOptimizationRemark`.