[clang] [clang][analyzer] Delay checking the model-path (PR #150133)
Jan Svoboda via cfe-commits
cfe-commits at lists.llvm.org
Tue Sep 2 10:04:37 PDT 2025
https://github.com/jansvoboda11 updated https://github.com/llvm/llvm-project/pull/150133
>From fd5445b09c1c32da72d41ac72b4dcd937d9676bf Mon Sep 17 00:00:00 2001
From: Jan Svoboda <jan_svoboda at apple.com>
Date: Tue, 22 Jul 2025 15:42:28 -0700
Subject: [PATCH] [clang][analyzer] Delay checking the model-path
---
clang/lib/Frontend/CompilerInvocation.cpp | 5 -----
clang/lib/StaticAnalyzer/Frontend/ModelInjector.cpp | 11 ++++++++++-
clang/test/Analysis/model-file-missing.cpp | 3 +++
3 files changed, 13 insertions(+), 6 deletions(-)
create mode 100644 clang/test/Analysis/model-file-missing.cpp
diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp
index 29f9cf3a7f0e3..ff3aec59f321c 100644
--- a/clang/lib/Frontend/CompilerInvocation.cpp
+++ b/clang/lib/Frontend/CompilerInvocation.cpp
@@ -1323,11 +1323,6 @@ static void parseAnalyzerConfigs(AnalyzerOptions &AnOpts,
if (!AnOpts.CTUDir.empty() && !llvm::sys::fs::is_directory(AnOpts.CTUDir))
Diags->Report(diag::err_analyzer_config_invalid_input) << "ctu-dir"
<< "a filename";
-
- if (!AnOpts.ModelPath.empty() &&
- !llvm::sys::fs::is_directory(AnOpts.ModelPath))
- Diags->Report(diag::err_analyzer_config_invalid_input) << "model-path"
- << "a filename";
}
/// Generate a remark argument. This is an inverse of `ParseOptimizationRemark`.
diff --git a/clang/lib/StaticAnalyzer/Frontend/ModelInjector.cpp b/clang/lib/StaticAnalyzer/Frontend/ModelInjector.cpp
index 7bc34f61255f4..975c72af0b031 100644
--- a/clang/lib/StaticAnalyzer/Frontend/ModelInjector.cpp
+++ b/clang/lib/StaticAnalyzer/Frontend/ModelInjector.cpp
@@ -9,6 +9,7 @@
#include "ModelInjector.h"
#include "clang/AST/Decl.h"
#include "clang/AST/DeclObjC.h"
+#include "clang/Basic/DiagnosticDriver.h"
#include "clang/Basic/LangStandard.h"
#include "clang/Basic/Stack.h"
#include "clang/Frontend/ASTUnit.h"
@@ -24,7 +25,15 @@
using namespace clang;
using namespace ento;
-ModelInjector::ModelInjector(CompilerInstance &CI) : CI(CI) {}
+ModelInjector::ModelInjector(CompilerInstance &CI) : CI(CI) {
+ if (CI.getAnalyzerOpts().ShouldEmitErrorsOnInvalidConfigValue &&
+ !CI.getAnalyzerOpts().ModelPath.empty()) {
+ auto S = CI.getVirtualFileSystem().status(CI.getAnalyzerOpts().ModelPath);
+ if (!S || S->getType() != llvm::sys::fs::file_type::directory_file)
+ CI.getDiagnostics().Report(diag::err_analyzer_config_invalid_input)
+ << "model-path" << "a filename";
+ }
+}
Stmt *ModelInjector::getBody(const FunctionDecl *D) {
onBodySynthesis(D);
diff --git a/clang/test/Analysis/model-file-missing.cpp b/clang/test/Analysis/model-file-missing.cpp
new file mode 100644
index 0000000000000..c9dfb4ec1b244
--- /dev/null
+++ b/clang/test/Analysis/model-file-missing.cpp
@@ -0,0 +1,3 @@
+// RUN: not %clang_analyze_cc1 -analyzer-checker=core -analyzer-config model-path=%t/blah %s -o - 2>&1 | FileCheck %s
+// CHECK: error: invalid input for analyzer-config option 'model-path', that expects a filename value
+// CHECK-NEXT: 1 error generated
More information about the cfe-commits
mailing list