commit:     f0de3ad85ccdcfc8b035b68750fe072531466fd1
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Tue Jul 22 15:28:35 2025 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Tue Jul 22 15:28:58 2025 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=f0de3ad8

dev-util/cvise: port to LLVM 20

Signed-off-by: Sam James <sam <AT> gentoo.org>

 dev-util/cvise/cvise-2.11.0-r1.ebuild          |   6 +-
 dev-util/cvise/cvise-9999.ebuild               |   2 +-
 dev-util/cvise/files/cvise-2.11.0-llvm20.patch | 319 +++++++++++++++++++++++++
 3 files changed, 325 insertions(+), 2 deletions(-)

diff --git a/dev-util/cvise/cvise-2.11.0-r1.ebuild 
b/dev-util/cvise/cvise-2.11.0-r1.ebuild
index fe8d56d23edc..5dc316fc5671 100644
--- a/dev-util/cvise/cvise-2.11.0-r1.ebuild
+++ b/dev-util/cvise/cvise-2.11.0-r1.ebuild
@@ -4,7 +4,7 @@
 EAPI=8
 
 PYTHON_COMPAT=( python3_{11..13} )
-LLVM_COMPAT=( {16..19} )
+LLVM_COMPAT=( {16..20} )
 inherit cmake llvm-r1 python-single-r1
 
 DESCRIPTION="Super-parallel Python port of the C-Reduce"
@@ -48,6 +48,10 @@ BDEPEND="
        )
 "
 
+PATCHES=(
+       "${FILESDIR}"/${P}-llvm20.patch
+)
+
 pkg_setup() {
        python-single-r1_pkg_setup
        llvm-r1_pkg_setup

diff --git a/dev-util/cvise/cvise-9999.ebuild b/dev-util/cvise/cvise-9999.ebuild
index 8b8c901fd360..053aa3ae36cd 100644
--- a/dev-util/cvise/cvise-9999.ebuild
+++ b/dev-util/cvise/cvise-9999.ebuild
@@ -4,7 +4,7 @@
 EAPI=8
 
 PYTHON_COMPAT=( python3_{11..13} )
-LLVM_COMPAT=( {16..20} )
+LLVM_COMPAT=( {16..21} )
 inherit cmake llvm-r1 python-single-r1
 
 DESCRIPTION="Super-parallel Python port of the C-Reduce"

diff --git a/dev-util/cvise/files/cvise-2.11.0-llvm20.patch 
b/dev-util/cvise/files/cvise-2.11.0-llvm20.patch
new file mode 100644
index 000000000000..b23d9ab4fa6e
--- /dev/null
+++ b/dev-util/cvise/files/cvise-2.11.0-llvm20.patch
@@ -0,0 +1,319 @@
+https://github.com/marxin/cvise/commit/29fc072fdba3abfe1c1d763af3ae84509276bef0
+
+From 29fc072fdba3abfe1c1d763af3ae84509276bef0 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Martin=20Li=C5=A1ka?= <[email protected]>
+Date: Sat, 23 Nov 2024 13:17:18 +0100
+Subject: [PATCH] Port to latest LLVM 20 (drop LLVM 14 and older) (#154)
+
+---
+ clang_delta/ExpressionDetector.cpp      | 10 +---
+ clang_delta/RemoveNamespace.cpp         |  4 --
+ clang_delta/RemoveNestedFunction.cpp    |  4 --
+ clang_delta/RewriteUtils.cpp            |  6 --
+ clang_delta/TemplateNonTypeArgToInt.cpp |  4 --
+ clang_delta/Transformation.cpp          |  8 +--
+ clang_delta/TransformationManager.cpp   | 77 ++++---------------------
+ cvise/passes/lines.py                   |  7 ++-
+ 9 files changed, 18 insertions(+), 104 deletions(-)
+
+diff --git a/clang_delta/ExpressionDetector.cpp 
b/clang_delta/ExpressionDetector.cpp
+index 7acbb494..a244b40a 100644
+--- a/clang_delta/ExpressionDetector.cpp
++++ b/clang_delta/ExpressionDetector.cpp
+@@ -16,9 +16,7 @@
+ 
+ #include "clang/AST/RecursiveASTVisitor.h"
+ #include "clang/AST/ASTContext.h"
+-#if LLVM_VERSION_MAJOR >= 15
+ #include "clang/Basic/FileEntry.h"
+-#endif
+ #include "clang/Basic/SourceManager.h"
+ #include "clang/Lex/Preprocessor.h"
+ 
+@@ -66,9 +64,7 @@ class IncludesPPCallbacks : public PPCallbacks {
+                           const Token &IncludeTok,
+                           StringRef FileName, bool IsAngled,
+                           CharSourceRange FilenameRange,
+-#if LLVM_VERSION_MAJOR < 15
+-                          const FileEntry *File,
+-#elif LLVM_VERSION_MAJOR < 16
++#if LLVM_VERSION_MAJOR < 16
+                           Optional<FileEntryRef> File,
+ #else
+                           OptionalFileEntryRef File,
+@@ -96,9 +92,7 @@ void IncludesPPCallbacks::InclusionDirective(SourceLocation 
HashLoc,
+                                              StringRef FileName,
+                                              bool /*IsAngled*/,
+                                              CharSourceRange 
/*FilenameRange*/,
+-#if LLVM_VERSION_MAJOR < 15
+-                                             const FileEntry * /*File*/,
+-#elif LLVM_VERSION_MAJOR < 16
++#if LLVM_VERSION_MAJOR < 16
+                                              Optional<FileEntryRef> /*File*/,
+ #else
+                                              OptionalFileEntryRef /*File*/,
+diff --git a/clang_delta/RemoveNamespace.cpp b/clang_delta/RemoveNamespace.cpp
+index f405bab3..20d234ee 100644
+--- a/clang_delta/RemoveNamespace.cpp
++++ b/clang_delta/RemoveNamespace.cpp
+@@ -770,11 +770,7 @@ void RemoveNamespace::handleOneUsingShadowDecl(const 
UsingShadowDecl *UD,
+     return;
+ 
+   std::string NewName;
+-#if LLVM_VERSION_MAJOR < 13
+-  UsingDecl *D = UD->getUsingDecl();
+-#else
+   UsingDecl *D = dyn_cast<UsingDecl>(UD->getIntroducer());
+-#endif
+ 
+   NestedNameSpecifierLoc QualifierLoc = D->getQualifierLoc();
+   NestedNameSpecifier *NNS = QualifierLoc.getNestedNameSpecifier();
+diff --git a/clang_delta/RemoveNestedFunction.cpp 
b/clang_delta/RemoveNestedFunction.cpp
+index ecb9a08c..2fb1b3d5 100644
+--- a/clang_delta/RemoveNestedFunction.cpp
++++ b/clang_delta/RemoveNestedFunction.cpp
+@@ -191,18 +191,14 @@ void 
RemoveNestedFunction::getVarStrForTemplateSpecialization(
+   std::string ArgStr;
+   llvm::raw_string_ostream Stream(ArgStr);
+   TST->template_arguments()[0].print(getPrintingPolicy(), Stream
+-#if LLVM_VERSION_MAJOR >= 13
+       , false
+-#endif
+       );
+ 
+   for (unsigned I = 1; I < NumArgs; ++I) {
+     const TemplateArgument Arg = TST->template_arguments()[I];
+     Stream << ", ";
+     Arg.print(getPrintingPolicy(), Stream
+-#if LLVM_VERSION_MAJOR >= 13
+       , false
+-#endif
+     );
+   }
+   size_t BeginPos = VarStr.find_first_of('<');
+diff --git a/clang_delta/RewriteUtils.cpp b/clang_delta/RewriteUtils.cpp
+index d6ed297c..40722c10 100644
+--- a/clang_delta/RewriteUtils.cpp
++++ b/clang_delta/RewriteUtils.cpp
+@@ -775,15 +775,9 @@ std::string RewriteUtils::getStmtIndentString(Stmt *S,
+   StringRef MB = SrcManager->getBufferData(FID);
+  
+   unsigned lineNo = SrcManager->getLineNumber(FID, StartOffset) - 1;
+-#if LLVM_VERSION_MAJOR >= 12
+   const SrcMgr::ContentCache&
+       Content = SrcManager->getSLocEntry(FID).getFile().getContentCache();
+   unsigned lineOffs = Content.SourceLineCache[lineNo];
+-#else
+-  const SrcMgr::ContentCache *
+-      Content = SrcManager->getSLocEntry(FID).getFile().getContentCache();
+-  unsigned lineOffs = Content->SourceLineCache[lineNo];
+-#endif
+  
+   // Find the whitespace at the start of the line.
+   StringRef indentSpace;
+diff --git a/clang_delta/TemplateNonTypeArgToInt.cpp 
b/clang_delta/TemplateNonTypeArgToInt.cpp
+index 7d840704..94f9928c 100644
+--- a/clang_delta/TemplateNonTypeArgToInt.cpp
++++ b/clang_delta/TemplateNonTypeArgToInt.cpp
+@@ -168,11 +168,7 @@ void 
TemplateNonTypeArgToInt::handleOneTemplateArgumentLoc(
+     if (!TheExpr->isValueDependent() &&
+         TheExpr->EvaluateAsInt(Result, *Context)) {
+       llvm::APSInt IVal = Result.Val.getInt();
+-#if LLVM_VERSION_MAJOR >= 13
+       IntString = toString(IVal, 10);
+-#else
+-      IntString = IVal.toString(10);
+-#endif
+     }
+   }
+ }
+diff --git a/clang_delta/Transformation.cpp b/clang_delta/Transformation.cpp
+index 78cd99ff..d4896cb9 100644
+--- a/clang_delta/Transformation.cpp
++++ b/clang_delta/Transformation.cpp
+@@ -117,11 +117,9 @@ void 
Transformation::outputOriginalSource(llvm::raw_ostream &OutStream)
+ #if LLVM_VERSION_MAJOR >= 16
+   std::optional<llvm::MemoryBufferRef> MainBuf =
+       SrcManager->getBufferOrNone(MainFileID);
+-#elif LLVM_VERSION_MAJOR >= 12
++#else
+   llvm::Optional<llvm::MemoryBufferRef> MainBuf =
+       SrcManager->getBufferOrNone(MainFileID);
+-#else
+-  const llvm::MemoryBuffer *MainBuf = SrcManager->getBuffer(MainFileID);
+ #endif
+   TransAssert(MainBuf && "Empty MainBuf!");
+   OutStream << MainBuf->getBufferStart();
+@@ -439,11 +437,7 @@ const Expr *Transformation::getBaseExprAndIdxs(const Expr 
*E,
+       // If we cannot have an integeral index, use 0.
+       if (IdxE && IdxE->EvaluateAsInt(Result, *Context)) {
+         llvm::APSInt IVal = Result.Val.getInt();
+-#if LLVM_VERSION_MAJOR >= 13
+         std::string IntStr = toString(IVal, 10);
+-#else
+-        std::string IntStr = IVal.toString(10);
+-#endif
+         std::stringstream TmpSS(IntStr);
+         if (!(TmpSS >> Idx))
+           TransAssert(0 && "Non-integer value!");
+diff --git a/clang_delta/TransformationManager.cpp 
b/clang_delta/TransformationManager.cpp
+index 1b37f229..d985bd51 100644
+--- a/clang_delta/TransformationManager.cpp
++++ b/clang_delta/TransformationManager.cpp
+@@ -20,15 +20,17 @@
+ #include "clang/Basic/Builtins.h"
+ #include "clang/Basic/Diagnostic.h"
+ #include "clang/Basic/FileManager.h"
+-#if LLVM_VERSION_MAJOR >= 15
+ #include "clang/Basic/LangOptions.h"
+ #include "clang/Basic/LangStandard.h"
+-#endif
+ #include "clang/Basic/TargetInfo.h"
+ #include "clang/Lex/Preprocessor.h"
+ #include "clang/Frontend/CompilerInstance.h"
+ #include "clang/Parse/ParseAST.h"
+ 
++#if LLVM_VERSION_MAJOR >= 20
++#include "llvm/Support/VirtualFileSystem.h"
++#endif
++
+ #include "Transformation.h"
+ 
+ using namespace std;
+@@ -96,12 +98,13 @@ bool 
TransformationManager::initializeCompilerInstance(std::string &ErrorMsg)
+   ClangInstance = new CompilerInstance();
+   assert(ClangInstance);
+   
+-  ClangInstance->createDiagnostics();
++  ClangInstance->createDiagnostics(
++#if LLVM_VERSION_MAJOR >= 20
++    *llvm::vfs::getRealFileSystem()
++#endif
++  );
+ 
+   TargetOptions &TargetOpts = ClangInstance->getTargetOpts();
+-#if LLVM_VERSION_MAJOR < 12
+-  PreprocessorOptions &PPOpts = ClangInstance->getPreprocessorOpts();
+-#endif
+   if (const char *env = getenv("CVISE_TARGET_TRIPLE")) {
+     TargetOpts.Triple = std::string(env);
+   } else {
+@@ -122,17 +125,13 @@ bool 
TransformationManager::initializeCompilerInstance(std::string &ErrorMsg)
+     else if (!CXXStandard.compare("c++17"))
+       LSTD = LangStandard::Kind::lang_cxx17;
+     else if (!CXXStandard.compare("c++20"))
+-#if LLVM_VERSION_MAJOR < 10
+-      LSTD = LangStandard::Kind::lang_cxx2a;
+-#else
+       LSTD = LangStandard::Kind::lang_cxx20;
+-#endif
+ 
+ // TODO: simplify and use c++23 and c++26
+ #if LLVM_VERSION_MAJOR >= 17
+     else if (!CXXStandard.compare("c++2b"))
+       LSTD = LangStandard::Kind::lang_cxx23;
+-#elif LLVM_VERSION_MAJOR >= 14
++#else
+     else if (!CXXStandard.compare("c++2b"))
+       LSTD = LangStandard::Kind::lang_cxx2b;
+ #endif
+@@ -142,41 +141,6 @@ bool 
TransformationManager::initializeCompilerInstance(std::string &ErrorMsg)
+     }
+   }
+ 
+-#if LLVM_VERSION_MAJOR < 10
+-  if (IK.getLanguage() == InputKind::C) {
+-    Invocation.setLangDefaults(ClangInstance->getLangOpts(), InputKind::C, T, 
PPOpts);
+-  }
+-  else if (IK.getLanguage() == InputKind::CXX) {
+-    // ISSUE: it might cause some problems when building AST
+-    // for a function which has a non-declared callee, e.g.,
+-    // It results an empty AST for the caller.
+-    Invocation.setLangDefaults(ClangInstance->getLangOpts(), InputKind::CXX, 
T, PPOpts, LSTD);
+-  }
+-  else if(IK.getLanguage() == InputKind::OpenCL) {
+-#elif LLVM_VERSION_MAJOR < 12
+-  if (IK.getLanguage() == Language::C) {
+-    Invocation.setLangDefaults(ClangInstance->getLangOpts(), 
InputKind(Language::C), T, PPOpts);
+-  }
+-  else if (IK.getLanguage() == Language::CXX) {
+-    // ISSUE: it might cause some problems when building AST
+-    // for a function which has a non-declared callee, e.g.,
+-    // It results an empty AST for the caller.
+-    Invocation.setLangDefaults(ClangInstance->getLangOpts(), 
InputKind(Language::CXX), T, PPOpts, LSTD);
+-  }
+-  else if(IK.getLanguage() == Language::OpenCL) {
+-#elif LLVM_VERSION_MAJOR < 15
+-  vector<string> includes;
+-  if (IK.getLanguage() == Language::C) {
+-    Invocation.setLangDefaults(ClangInstance->getLangOpts(), 
InputKind(Language::C), T, includes);
+-  }
+-  else if (IK.getLanguage() == Language::CXX) {
+-    // ISSUE: it might cause some problems when building AST
+-    // for a function which has a non-declared callee, e.g.,
+-    // It results an empty AST for the caller.
+-    Invocation.setLangDefaults(ClangInstance->getLangOpts(), 
InputKind(Language::CXX), T, includes, LSTD);
+-  }
+-  else if(IK.getLanguage() == Language::OpenCL) {
+-#else
+   vector<string> includes;
+   if (IK.getLanguage() == Language::C) {
+     LangOptions::setLangDefaults(ClangInstance->getLangOpts(), Language::C, 
T, includes);
+@@ -188,7 +152,6 @@ bool 
TransformationManager::initializeCompilerInstance(std::string &ErrorMsg)
+     LangOptions::setLangDefaults(ClangInstance->getLangOpts(), Language::CXX, 
T, includes, LSTD);
+   }
+   else if(IK.getLanguage() == Language::OpenCL) {
+-#endif
+     //Commandline parameters
+     std::vector<const char*> Args;
+     Args.push_back("-x");
+@@ -210,31 +173,11 @@ bool 
TransformationManager::initializeCompilerInstance(std::string &ErrorMsg)
+     Args.push_back("-fno-builtin");
+ 
+     CompilerInvocation::CreateFromArgs(Invocation,
+-#if LLVM_VERSION_MAJOR >= 10
+                                        Args,
+-#else
+-                                       &Args[0], &Args[0] + Args.size(),
+-#endif
+                                        ClangInstance->getDiagnostics());
+-#if LLVM_VERSION_MAJOR < 15
+-    Invocation.setLangDefaults(ClangInstance->getLangOpts(),
+-#else
+     LangOptions::setLangDefaults(ClangInstance->getLangOpts(),
+-#endif
+-
+-#if LLVM_VERSION_MAJOR < 10
+-                               InputKind::OpenCL,
+-#elif LLVM_VERSION_MAJOR < 15
+-                               InputKind(Language::OpenCL),
+-#else
+                                Language::OpenCL,
+-#endif
+-
+-#if LLVM_VERSION_MAJOR < 12
+-                             T, PPOpts);
+-#else
+                              T, includes);
+-#endif
+   }
+   else {
+     ErrorMsg = "Unsupported file type!";
+diff --git a/cvise/passes/lines.py b/cvise/passes/lines.py
+index 15beb42a..fc3848be 100644
+--- a/cvise/passes/lines.py
++++ b/cvise/passes/lines.py
+@@ -16,9 +16,10 @@ def check_prerequisites(self):
+     def __format(self, test_case, check_sanity):
+         tmp = os.path.dirname(test_case)
+ 
+-        with CloseableTemporaryFile(mode='w+', dir=tmp) as backup, 
CloseableTemporaryFile(
+-            mode='w+', dir=tmp
+-        ) as tmp_file:
++        with (
++            CloseableTemporaryFile(mode='w+', dir=tmp) as backup,
++            CloseableTemporaryFile(mode='w+', dir=tmp) as tmp_file,
++        ):
+             backup.close()
+             with open(test_case) as in_file:
+                 try:

Reply via email to