File fix-llvm21-build.patch of Package ccls
From 4427527ed8107719457b5260443e8cad024e446f Mon Sep 17 00:00:00 2001
From: Stephen Senran Zhang <zsrkmyn@gmail.com>
Date: Thu, 7 Aug 2025 00:54:25 +0800
Subject: [PATCH] Accommodate changes of LLVM 21 & 22 to fix builds (#985)
---
src/clang_tu.cc | 9 ++++++++-
src/messages/textDocument_completion.cc | 2 +-
src/sema_manager.cc | 16 ++++++++++++++--
3 files changed, 23 insertions(+), 4 deletions(-)
diff --git a/src/clang_tu.cc b/src/clang_tu.cc
index 5c880b32c..b96ab4a59 100644
--- a/src/clang_tu.cc
+++ b/src/clang_tu.cc
@@ -116,11 +116,18 @@ std::unique_ptr<CompilerInvocation> buildCompilerInvocation(const std::string &m
args.insert(args.begin() + 1, std::begin(arr), std::end(arr));
}
+#if (LLVM_VERSION_MAJOR == 21 && LLVM_VERSION_MINOR >= 1) || \
+ (LLVM_VERSION_MAJOR >= 22) // llvmorg-21-init-12923-g13e1a2cb2246
+ DiagnosticOptions DiagOpt;
+#else
+ DiagnosticOptions *DiagOpt = new DiagnosticOptions;
+#endif
+
IntrusiveRefCntPtr<DiagnosticsEngine> diags(CompilerInstance::createDiagnostics(
#if LLVM_VERSION_MAJOR >= 20
*vfs,
#endif
- new DiagnosticOptions, new IgnoringDiagConsumer, true));
+ DiagOpt, new IgnoringDiagConsumer, true));
#if LLVM_VERSION_MAJOR < 12 // llvmorg-12-init-5498-g257b29715bb
driver::Driver d(args[0], llvm::sys::getDefaultTargetTriple(), *diags, vfs);
#else
diff --git a/src/messages/textDocument_completion.cc b/src/messages/textDocument_completion.cc
index a5065515e..7ffde8553 100644
--- a/src/messages/textDocument_completion.cc
+++ b/src/messages/textDocument_completion.cc
@@ -350,7 +350,7 @@ class CompletionConsumer : public CodeCompleteConsumer {
if (fd->getTemplatedDecl()->getKind() == Decl::CXXDeductionGuide)
continue;
}
- if (auto *rd = dyn_cast<RecordDecl>(r.Declaration))
+ if (auto *rd = dyn_cast<CXXRecordDecl>(r.Declaration))
if (rd->isInjectedClassName())
continue;
auto nk = r.Declaration->getDeclName().getNameKind();
diff --git a/src/sema_manager.cc b/src/sema_manager.cc
index 325c9a9c4..9ae1c132a 100644
--- a/src/sema_manager.cc
+++ b/src/sema_manager.cc
@@ -352,7 +352,13 @@ void buildPreamble(Session &session, CompilerInvocation &ci, IntrusiveRefCntPtr<
#if LLVM_VERSION_MAJOR >= 20
*fs,
#endif
- &ci.getDiagnosticOpts(), &dc, false);
+#if (LLVM_VERSION_MAJOR == 21 && LLVM_VERSION_MINOR >= 1) || \
+ (LLVM_VERSION_MAJOR >= 22) // llvmorg-21-init-12923-g13e1a2cb2246
+ ci.getDiagnosticOpts(),
+#else
+ &ci.getDiagnosticOpts(),
+#endif
+ &dc, false);
if (oldP) {
std::lock_guard lock(session.wfiles->mutex);
for (auto &include : oldP->includes)
@@ -362,7 +368,13 @@ void buildPreamble(Session &session, CompilerInvocation &ci, IntrusiveRefCntPtr<
}
CclsPreambleCallbacks pc;
- if (auto newPreamble = PrecompiledPreamble::Build(ci, buf.get(), bounds, *de, fs, session.pch, true,
+ if (auto newPreamble = PrecompiledPreamble::Build(ci, buf.get(), bounds,
+#if LLVM_VERSION_MAJOR >= 22 // llvmorg-22-init-2136-gc7f343750744
+ de,
+#else
+ *de,
+#endif
+ fs, session.pch, true,
#if LLVM_VERSION_MAJOR >= 17 // llvmorg-17-init-4072-gcc929590ad30
"",
#endif