diff --git a/mingw-w64-creduce/001-port-to-llvm-16.patch b/mingw-w64-creduce/001-port-to-llvm-16.patch new file mode 100644 index 0000000000..a2bfd00b49 --- /dev/null +++ b/mingw-w64-creduce/001-port-to-llvm-16.patch @@ -0,0 +1,235 @@ +From 8ab9a69caf13ce24172737e8bfd09de51a1ecb6a Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Bernhard=20Rosenkr=C3=A4nzer?= +Date: Sat, 15 Apr 2023 02:35:12 +0200 +Subject: [PATCH] Port to LLVM 16.0 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Signed-off-by: Bernhard Rosenkränzer +--- + clang_delta/CommonRenameClassRewriteVisitor.h | 3 +- + clang_delta/ExpressionDetector.cpp | 4 +-- + clang_delta/RemoveNestedFunction.cpp | 6 ++-- + clang_delta/TemplateArgToInt.cpp | 5 ++-- + clang_delta/Transformation.cpp | 29 ++++++++----------- + clang_delta/Transformation.h | 9 ++---- + 6 files changed, 23 insertions(+), 33 deletions(-) + +diff --git a/clang_delta/CommonRenameClassRewriteVisitor.h b/clang_delta/CommonRenameClassRewriteVisitor.h +index ba860d9d..023937ac 100644 +--- a/clang_delta/CommonRenameClassRewriteVisitor.h ++++ b/clang_delta/CommonRenameClassRewriteVisitor.h +@@ -420,8 +420,7 @@ bool CommonRenameClassRewriteVisitor::TraverseTemplateArgumentLoc( + return getDerived().TraverseStmt(ArgLoc.getSourceExpression()); + + case TemplateArgument::Pack: +- return getDerived().TraverseTemplateArguments(Arg.pack_begin(), +- Arg.pack_size()); ++ return getDerived().TraverseTemplateArguments(Arg); + } + + return true; +diff --git a/clang_delta/ExpressionDetector.cpp b/clang_delta/ExpressionDetector.cpp +index e708cd68..cf703924 100644 +--- a/clang_delta/ExpressionDetector.cpp ++++ b/clang_delta/ExpressionDetector.cpp +@@ -62,7 +62,7 @@ class IncludesPPCallbacks : public PPCallbacks { + virtual void InclusionDirective(SourceLocation HashLoc, + const Token &IncludeTok, + StringRef FileName, bool IsAngled, +- CharSourceRange FilenameRange, Optional File, ++ CharSourceRange FilenameRange, OptionalFileEntryRef File, + StringRef SearchPath, StringRef RelativePath, + const Module *Imported, + SrcMgr::CharacteristicKind FileType) override; +@@ -82,7 +82,7 @@ void IncludesPPCallbacks::InclusionDirective(SourceLocation HashLoc, + StringRef FileName, + bool /*IsAngled*/, + CharSourceRange /*FilenameRange*/, +- Optional /*File*/, ++ OptionalFileEntryRef /*File*/, + StringRef /*SearchPath*/, + StringRef /*RelativePath*/, + const Module * /*Imported*/, +diff --git a/clang_delta/RemoveNestedFunction.cpp b/clang_delta/RemoveNestedFunction.cpp +index f3ebc1cf..8948d76b 100644 +--- a/clang_delta/RemoveNestedFunction.cpp ++++ b/clang_delta/RemoveNestedFunction.cpp +@@ -183,18 +183,18 @@ void RemoveNestedFunction::getVarStrForTemplateSpecialization( + std::string &VarStr, + const TemplateSpecializationType *TST) + { +- unsigned NumArgs = TST->getNumArgs(); ++ unsigned NumArgs = TST->template_arguments().size(); + if (NumArgs == 0) { + return; + } + + std::string ArgStr; + llvm::raw_string_ostream Stream(ArgStr); +- TST->getArg(0).print(Context->getPrintingPolicy(), Stream, ++ TST->template_arguments()[0].print(Context->getPrintingPolicy(), Stream, + /*IncludeType*/ true); + + for (unsigned I = 1; I < NumArgs; ++I) { +- const TemplateArgument &Arg = TST->getArg(I); ++ const TemplateArgument &Arg = TST->template_arguments()[I]; + Stream << ", "; + Arg.print(Context->getPrintingPolicy(), Stream, /*IncludeType*/ true); + } +diff --git a/clang_delta/TemplateArgToInt.cpp b/clang_delta/TemplateArgToInt.cpp +index d005f8af..e8b44a2a 100644 +--- a/clang_delta/TemplateArgToInt.cpp ++++ b/clang_delta/TemplateArgToInt.cpp +@@ -357,8 +357,7 @@ void TemplateArgToInt::handleOneType(const Type *Ty) + if (!SubstType) + return; + +- const TemplateTypeParmType *ParmType = SubstType->getReplacedParameter(); +- TemplateTypeParmDecl *ParmDecl = ParmType->getDecl(); ++ const TemplateTypeParmDecl *ParmDecl = SubstType->getReplacedParameter(); + TransAssert(ParmDecl && "Invalid ParmDecl!"); + const TemplateDecl *TmplD = ParamToTemplateDecl[ParmDecl]; + if (TmplD == NULL) { +@@ -384,7 +383,7 @@ void TemplateArgToInt::handleOneType(const Type *Ty) + TemplateParameterIdxSet *InvalidIdx = + DeclToParamIdx[dyn_cast(TmplD->getCanonicalDecl())]; + TransAssert(InvalidIdx && "NULL InvalidIdx!"); +- InvalidIdx->insert(ParmType->getIndex()); ++ InvalidIdx->insert(ParmDecl->getIndex()); + } + + TemplateArgToInt::~TemplateArgToInt() +diff --git a/clang_delta/Transformation.cpp b/clang_delta/Transformation.cpp +index 0bd58218..b350eec5 100644 +--- a/clang_delta/Transformation.cpp ++++ b/clang_delta/Transformation.cpp +@@ -807,7 +807,7 @@ const CXXRecordDecl *Transformation::getBaseDeclFromType(const Type *Ty) + + case Type::TypeOf: { + return getBaseDeclFromType( +- dyn_cast(Ty)->getUnderlyingType().getTypePtr()); ++ dyn_cast(Ty)->getUnmodifiedType().getTypePtr()); + } + + default: +@@ -876,8 +876,7 @@ bool Transformation::isBeforeColonColon(TypeLoc &Loc) + } + + bool Transformation::replaceDependentNameString(const Type *Ty, +- const TemplateArgument *Args, +- unsigned NumArgs, ++ ArrayRef Args, + std::string &Str, + bool &Typename) + { +@@ -901,7 +900,7 @@ bool Transformation::replaceDependentNameString(const Type *Ty, + return false; + + unsigned Idx = ParmTy->getIndex(); +- TransAssert((Idx < NumArgs) && "Bad Parm Index!"); ++ TransAssert((Idx < Args.size()) && "Bad Parm Index!"); + const TemplateArgument Arg = Args[Idx]; + if (Arg.getKind() != TemplateArgument::Type) + return false; +@@ -915,13 +914,12 @@ bool Transformation::replaceDependentNameString(const Type *Ty, + + bool Transformation::getTemplateTypeParmString( + const TemplateTypeParmType *ParmTy, +- const TemplateArgument *Args, +- unsigned NumArgs, ++ ArrayRef Args, + std::string &Str) + { + unsigned Idx = ParmTy->getIndex(); + // we could have default template args, skip this case for now +- if (Idx >= NumArgs) ++ if (Idx >= Args.size()) + return false; + const TemplateArgument Arg = Args[Idx]; + if (Arg.getKind() != TemplateArgument::Type) +@@ -933,8 +931,7 @@ bool Transformation::getTemplateTypeParmString( + + bool Transformation::getTypedefString(const StringRef &Name, + const CXXRecordDecl *CXXRD, +- const TemplateArgument *Args, +- unsigned NumArgs, ++ ArrayRef Args, + std::string &Str, + bool &Typename) + { +@@ -948,12 +945,12 @@ bool Transformation::getTypedefString(const StringRef &Name, + Type::TypeClass TC = UnderlyingTy->getTypeClass(); + if (TC == Type::DependentName) { + if (replaceDependentNameString(UnderlyingTy, Args, +- NumArgs, Str, Typename)) ++ Str, Typename)) + return true; + } + else if (const TemplateTypeParmType *ParmTy = + UnderlyingTy->getAs()) { +- if (getTemplateTypeParmString(ParmTy, Args, NumArgs, Str)) ++ if (getTemplateTypeParmString(ParmTy, Args, Str)) + return true; + } + } +@@ -970,7 +967,7 @@ bool Transformation::getTypedefString(const StringRef &Name, + const CXXRecordDecl *BaseDef = Base->getDefinition(); + if (!BaseDef) + continue; +- if (getTypedefString(Name, BaseDef, Args, NumArgs, Str, Typename)) ++ if (getTypedefString(Name, BaseDef, Args, Str, Typename)) + return true; + } + +@@ -998,15 +995,13 @@ bool Transformation::getDependentNameTypeString( + if (!BaseDef) + return false; + +- unsigned NumArgs = 0; +- const TemplateArgument *Args = NULL; ++ ArrayRef Args; + if (const TemplateSpecializationType *TST = + Ty->getAs()) { +- NumArgs = TST->getNumArgs(); +- Args = TST->getArgs(); ++ Args = TST->template_arguments(); + } + return getTypedefString(IdInfo->getName(), +- BaseDef, Args, NumArgs, Str, Typename); ++ BaseDef, Args, Str, Typename); + } + + bool Transformation::getTypeString(const QualType &QT, +diff --git a/clang_delta/Transformation.h b/clang_delta/Transformation.h +index 142f7eec..5b2da62f 100644 +--- a/clang_delta/Transformation.h ++++ b/clang_delta/Transformation.h +@@ -271,8 +271,7 @@ friend class clang_delta_common_visitor::CommonRenameClassRewriteVisitor; + + bool getTypedefString(const llvm::StringRef &Name, + const clang::CXXRecordDecl *CXXRD, +- const clang::TemplateArgument *Args, +- unsigned NumArgs, ++ const llvm::ArrayRef Args, + std::string &Str, + bool &Typename); + +@@ -281,14 +280,12 @@ friend class clang_delta_common_visitor::CommonRenameClassRewriteVisitor; + bool &Typename); + + bool replaceDependentNameString(const clang::Type *Ty, +- const clang::TemplateArgument *Args, +- unsigned NumArgs, ++ const llvm::ArrayRef Args, + std::string &Str, + bool &Typename); + + bool getTemplateTypeParmString(const clang::TemplateTypeParmType *ParmTy, +- const clang::TemplateArgument *Args, +- unsigned NumArgs, ++ const llvm::ArrayRef Args, + std::string &Str); + + unsigned getNumExplicitDecls(const clang::CXXRecordDecl *CXXRD); diff --git a/mingw-w64-creduce/PKGBUILD b/mingw-w64-creduce/PKGBUILD index 7caab3b192..33fe90a026 100644 --- a/mingw-w64-creduce/PKGBUILD +++ b/mingw-w64-creduce/PKGBUILD @@ -5,7 +5,7 @@ pkgbase=mingw-w64-${_realname} pkgname=("${MINGW_PACKAGE_PREFIX}-${_realname}") replaces=("${MINGW_PACKAGE_PREFIX}-${_realname}-git") pkgver=2.10.0.r96.g8d56bee -pkgrel=2 +pkgrel=3 _commit=8d56bee3e1d2577fc8afd2ecc03b1323d6873404 pkgdesc="A C program reducer (mingw-w64)" depends=('perl-Benchmark-Timer' @@ -20,11 +20,15 @@ arch=('any') mingw_arch=('mingw32' 'mingw64' 'ucrt64' 'clang64' 'clang32') url='https://github.com/csmith-project/creduce' license=('spdx:NCSA') -makedepends=("${MINGW_PACKAGE_PREFIX}-autotools" "${MINGW_PACKAGE_PREFIX}-cc" "git") +makedepends=("${MINGW_PACKAGE_PREFIX}-cc" + "${MINGW_PACKAGE_PREFIX}-autotools" + "git") source=(${_realname}::git+https://github.com/csmith-project/creduce#commit=${_commit} - "llvm-config-cygpath") + "llvm-config-cygpath" + "001-port-to-llvm-16.patch") sha256sums=('SKIP' - '03a7239d1e26d8a5dd5f405e10826679725cae6c01a9c37e80c6f1c184dad0a9') + '03a7239d1e26d8a5dd5f405e10826679725cae6c01a9c37e80c6f1c184dad0a9' + 'c7de1b06bd9fd840db1c5e9d3f9b9516a76cd14d9e969547bdaa995c5af4bbab') pkgver() { cd "${srcdir}/${_realname}" @@ -32,15 +36,17 @@ pkgver() { } prepare() { - cd "${srcdir}" - [[ -d tools ]] && rm -rf tools - mkdir tools - cp -f "${srcdir}"/llvm-config-cygpath tools/llvm-config + cd "${srcdir}"/${_realname} + # https://github.com/csmith-project/creduce/pull/254 + git apply "${srcdir}"/001-port-to-llvm-16.patch + + [[ -d "${srcdir}"/tools ]] && rm -rf "${srcdir}"tools + mkdir -p "${srcdir}"/tools + cp -f "${srcdir}"/llvm-config-cygpath "${srcdir}"/tools/llvm-config } build() { - [[ -d build-${MSYSTEM} ]] && rm -rf build-${MSYSTEM} - mkdir build-${MSYSTEM} && cd build-${MSYSTEM} + mkdir -p build-${MSYSTEM} && cd build-${MSYSTEM} PATH="${srcdir}/tools:$PATH" \ ../${_realname}/configure \