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
openSUSE Build Service is sponsored by