[clang] cebaf0c - [clang] Make the `AnalyzerOptions` reference count non-intrusive (#137680)
via cfe-commits
cfe-commits at lists.llvm.org
Mon Apr 28 12:42:06 PDT 2025
Author: Jan Svoboda
Date: 2025-04-28T12:42:03-07:00
New Revision: cebaf0cea1f2cf9d71b4d965104e08a7ff6c89c4
URL: https://github.com/llvm/llvm-project/commit/cebaf0cea1f2cf9d71b4d965104e08a7ff6c89c4
DIFF: https://github.com/llvm/llvm-project/commit/cebaf0cea1f2cf9d71b4d965104e08a7ff6c89c4.diff
LOG: [clang] Make the `AnalyzerOptions` reference count non-intrusive (#137680)
This PR makes `CompilerInvocation` the sole owner of the
`AnalyzerOptions` instance. Clients can no longer become co-owners by
doing something like this:
```c++
void shareOwnership(CompilerInvocation &CI) {
IntrusiveRefCntPtr Shared = &CI.getAnalyzerOpts();
}
```
The motivation for this is given here:
https://github.com/llvm/llvm-project/pull/133467#issuecomment-2762065443
Added:
Modified:
clang/include/clang/Frontend/CompilerInvocation.h
clang/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h
clang/lib/Frontend/CompilerInvocation.cpp
Removed:
################################################################################
diff --git a/clang/include/clang/Frontend/CompilerInvocation.h b/clang/include/clang/Frontend/CompilerInvocation.h
index 1827ff0f6816d..f2c653d3075df 100644
--- a/clang/include/clang/Frontend/CompilerInvocation.h
+++ b/clang/include/clang/Frontend/CompilerInvocation.h
@@ -89,7 +89,7 @@ class CompilerInvocationBase {
std::shared_ptr<PreprocessorOptions> PPOpts;
/// Options controlling the static analyzer.
- AnalyzerOptionsRef AnalyzerOpts;
+ std::shared_ptr<AnalyzerOptions> AnalyzerOpts;
std::shared_ptr<MigratorOptions> MigratorOpts;
diff --git a/clang/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h b/clang/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h
index 2c970301879d2..54c2fb8a60ca1 100644
--- a/clang/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h
+++ b/clang/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h
@@ -176,7 +176,7 @@ class PositiveAnalyzerOption {
/// and should be eventually converted into -analyzer-config flags. New analyzer
/// options should not be implemented as frontend flags. Frontend flags still
/// make sense for things that do not affect the actual analysis.
-class AnalyzerOptions : public RefCountedBase<AnalyzerOptions> {
+class AnalyzerOptions {
public:
using ConfigTable = llvm::StringMap<std::string>;
@@ -416,8 +416,6 @@ class AnalyzerOptions : public RefCountedBase<AnalyzerOptions> {
}
};
-using AnalyzerOptionsRef = IntrusiveRefCntPtr<AnalyzerOptions>;
-
//===----------------------------------------------------------------------===//
// We'll use AnalyzerOptions in the frontend, but we can't link the frontend
// with clangStaticAnalyzerCore, because clangStaticAnalyzerCore depends on
diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp
index 1df503859204d..8ff62ae2552c3 100644
--- a/clang/lib/Frontend/CompilerInvocation.cpp
+++ b/clang/lib/Frontend/CompilerInvocation.cpp
@@ -142,7 +142,7 @@ CompilerInvocationBase::CompilerInvocationBase()
DiagnosticOpts(llvm::makeIntrusiveRefCnt<DiagnosticOptions>()),
HSOpts(std::make_shared<HeaderSearchOptions>()),
PPOpts(std::make_shared<PreprocessorOptions>()),
- AnalyzerOpts(llvm::makeIntrusiveRefCnt<AnalyzerOptions>()),
+ AnalyzerOpts(std::make_shared<AnalyzerOptions>()),
MigratorOpts(std::make_shared<MigratorOptions>()),
APINotesOpts(std::make_shared<APINotesOptions>()),
CodeGenOpts(std::make_shared<CodeGenOptions>()),
@@ -159,7 +159,7 @@ CompilerInvocationBase::deep_copy_assign(const CompilerInvocationBase &X) {
DiagnosticOpts = makeIntrusiveRefCntCopy(X.getDiagnosticOpts());
HSOpts = make_shared_copy(X.getHeaderSearchOpts());
PPOpts = make_shared_copy(X.getPreprocessorOpts());
- AnalyzerOpts = makeIntrusiveRefCntCopy(X.getAnalyzerOpts());
+ AnalyzerOpts = make_shared_copy(X.getAnalyzerOpts());
MigratorOpts = make_shared_copy(X.getMigratorOpts());
APINotesOpts = make_shared_copy(X.getAPINotesOpts());
CodeGenOpts = make_shared_copy(X.getCodeGenOpts());
More information about the cfe-commits
mailing list