Author: Jan Svoboda Date: 2025-03-11T10:29:39-07:00 New Revision: eaca60d1a9a54ae0aa8626719decef4b11eb939d
URL: https://github.com/llvm/llvm-project/commit/eaca60d1a9a54ae0aa8626719decef4b11eb939d DIFF: https://github.com/llvm/llvm-project/commit/eaca60d1a9a54ae0aa8626719decef4b11eb939d.diff LOG: [clang] Hide the `DiagnosticOptions` pointer from `CompilerInvocation` (#106274) This PR hides the reference-counter pointer that holds `DiagnosticOptions` from the public API of `CompilerInvocation`. This gives `CompilerInvocation` an exclusive control over the lifetime of this member, which will eventually be leveraged to implement a copy-on-write behavior. The only client that currently accesses that pointer is `clangd::buildPreamble()` which takes care to reset it so that it's not reset concurrently. This code is made redundant by making the reference count of `DiagnosticOptions` atomic. Added: Modified: clang-tools-extra/clangd/Preamble.cpp clang/include/clang/Basic/DiagnosticOptions.h clang/include/clang/Frontend/CompilerInvocation.h Removed: ################################################################################ diff --git a/clang-tools-extra/clangd/Preamble.cpp b/clang-tools-extra/clangd/Preamble.cpp index b247e608eece3..b634981bb46bd 100644 --- a/clang-tools-extra/clangd/Preamble.cpp +++ b/clang-tools-extra/clangd/Preamble.cpp @@ -673,7 +673,6 @@ buildPreamble(PathRef FileName, CompilerInvocation CI, // Reset references to ref-counted-ptrs before executing the callbacks, to // prevent resetting them concurrently. PreambleDiagsEngine.reset(); - CI.DiagnosticOpts.reset(); // When building the AST for the main file, we do want the function // bodies. diff --git a/clang/include/clang/Basic/DiagnosticOptions.h b/clang/include/clang/Basic/DiagnosticOptions.h index e2faf3d0df95c..29146532f9524 100644 --- a/clang/include/clang/Basic/DiagnosticOptions.h +++ b/clang/include/clang/Basic/DiagnosticOptions.h @@ -67,7 +67,8 @@ inline DiagnosticLevelMask operator&(DiagnosticLevelMask LHS, raw_ostream& operator<<(raw_ostream& Out, DiagnosticLevelMask M); /// Options for controlling the compiler diagnostics engine. -class DiagnosticOptions : public RefCountedBase<DiagnosticOptions>{ +class DiagnosticOptions + : public llvm::ThreadSafeRefCountedBase<DiagnosticOptions> { friend bool ParseDiagnosticArgs(DiagnosticOptions &, llvm::opt::ArgList &, clang::DiagnosticsEngine *, bool); diff --git a/clang/include/clang/Frontend/CompilerInvocation.h b/clang/include/clang/Frontend/CompilerInvocation.h index 9daa0a1ecf948..1e4d2da86c2be 100644 --- a/clang/include/clang/Frontend/CompilerInvocation.h +++ b/clang/include/clang/Frontend/CompilerInvocation.h @@ -269,7 +269,6 @@ class CompilerInvocation : public CompilerInvocationBase { /// @{ using CompilerInvocationBase::LangOpts; using CompilerInvocationBase::TargetOpts; - using CompilerInvocationBase::DiagnosticOpts; std::shared_ptr<HeaderSearchOptions> getHeaderSearchOptsPtr() { return HSOpts; } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits