Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package cvise for openSUSE:Factory checked in at 2022-09-12 19:08:31 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/cvise (Old) and /work/SRC/openSUSE:Factory/.cvise.new.2083 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "cvise" Mon Sep 12 19:08:31 2022 rev:55 rq:1002720 version:2.5.0+git.20220912.e2268dd Changes: -------- --- /work/SRC/openSUSE:Factory/cvise/cvise.changes 2022-09-11 21:57:56.113726999 +0200 +++ /work/SRC/openSUSE:Factory/.cvise.new.2083/cvise.changes 2022-09-12 19:08:35.698594809 +0200 @@ -1,0 +2,16 @@ +Mon Sep 12 07:46:52 UTC 2022 - mli...@suse.cz + +- Update to version 2.5.0+git.20220912.e2268dd: + * Added member-to-global pass that moves declarations within a record (class or struct) in front of the record + +------------------------------------------------------------------- +Mon Sep 12 07:17:11 UTC 2022 - mli...@suse.cz + +- Update to version 2.5.0+git.20220912.c56e8a0: + * Replaced everywhere TypedefDecl by TypedefNameDecl to supporting typedef-like using declarations + * Hopefully compatible with old libclang + * return-void transformation discarded function specifiers, attributes and scope qualifiers + * class-template-to-class transformation was not working with out-of-line method definitions + * Add c++2b C++ standard. + +------------------------------------------------------------------- Old: ---- cvise-2.5.0+git.20220911.4c7ce7f.tar.xz New: ---- cvise-2.5.0+git.20220912.e2268dd.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ cvise.spec ++++++ --- /var/tmp/diff_new_pack.apLDqa/_old 2022-09-12 19:08:36.346596631 +0200 +++ /var/tmp/diff_new_pack.apLDqa/_new 2022-09-12 19:08:36.354596653 +0200 @@ -17,7 +17,7 @@ Name: cvise -Version: 2.5.0+git.20220911.4c7ce7f +Version: 2.5.0+git.20220912.e2268dd Release: 0 Summary: Super-parallel Python port of the C-Reduce License: BSD-3-Clause ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.apLDqa/_old 2022-09-12 19:08:36.406596799 +0200 +++ /var/tmp/diff_new_pack.apLDqa/_new 2022-09-12 19:08:36.410596811 +0200 @@ -1,6 +1,6 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/marxin/cvise</param> - <param name="changesrevision">d968def2709693b1aaba5ecb022876093972f1bd</param></service></servicedata> + <param name="changesrevision">18c806a407c2519aedb21b01d0029db304739c47</param></service></servicedata> (No newline at EOF) ++++++ cvise-2.5.0+git.20220911.4c7ce7f.tar.xz -> cvise-2.5.0+git.20220912.e2268dd.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cvise-2.5.0+git.20220911.4c7ce7f/clang_delta/CMakeLists.txt new/cvise-2.5.0+git.20220912.e2268dd/clang_delta/CMakeLists.txt --- old/cvise-2.5.0+git.20220911.4c7ce7f/clang_delta/CMakeLists.txt 2022-09-11 20:45:54.000000000 +0200 +++ new/cvise-2.5.0+git.20220912.e2268dd/clang_delta/CMakeLists.txt 2022-09-12 09:46:31.000000000 +0200 @@ -317,6 +317,10 @@ "/tests/replace-function-def-with-decl/simple.cpp.preserve_foo.output" "/tests/replace-function-def-with-decl/simple.cpp.preserve_missing.output" "/tests/replace-function-def-with-decl/simple.cpp.preserve_quack.output" + "/tests/replace-simple-typedef/test1.cc" + "/tests/replace-simple-typedef/test1.output" + "/tests/replace-simple-typedef/test2.cc" + "/tests/replace-simple-typedef/test2.output" "/tests/return-void/test1.c" "/tests/return-void/test1.output" "/tests/return-void/test2.c" @@ -354,6 +358,18 @@ "/tests/union-to-struct/union3.output" "/tests/simple-inliner/alias-crash.c" "/tests/simple-inliner/alias-crash.output" + "/tests/member-to-global/test1.cc" + "/tests/member-to-global/test1.output" + "/tests/member-to-global/test2.cc" + "/tests/member-to-global/test2.output" + "/tests/member-to-global/test3.cc" + "/tests/member-to-global/test3.output" + "/tests/member-to-global/test4.cc" + "/tests/member-to-global/test4.output" + "/tests/member-to-global/test5.cc" + "/tests/member-to-global/test5.output" + "/tests/member-to-global/test6.cc" + "/tests/member-to-global/test6.output" ) foreach(file IN LISTS SOURCE_FILES) @@ -460,6 +476,8 @@ ParamToGlobal.h ParamToLocal.cpp ParamToLocal.h + MemberToGlobal.cpp + MemberToGlobal.h ReduceArrayDim.cpp ReduceArrayDim.h ReduceArraySize.cpp diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cvise-2.5.0+git.20220911.4c7ce7f/clang_delta/MemberToGlobal.cpp new/cvise-2.5.0+git.20220912.e2268dd/clang_delta/MemberToGlobal.cpp --- old/cvise-2.5.0+git.20220911.4c7ce7f/clang_delta/MemberToGlobal.cpp 1970-01-01 01:00:00.000000000 +0100 +++ new/cvise-2.5.0+git.20220912.e2268dd/clang_delta/MemberToGlobal.cpp 2022-09-12 09:46:31.000000000 +0200 @@ -0,0 +1,192 @@ +//===----------------------------------------------------------------------===// +// +// Copyright (c) 2012, 2013, 2014, 2015 The University of Utah +// All rights reserved. +// +// This file is distributed under the University of Illinois Open Source +// License. See the file COPYING for details. +// +//===----------------------------------------------------------------------===// + +#if HAVE_CONFIG_H +# include <config.h> +#endif + +#include "MemberToGlobal.h" + +#include "clang/AST/ASTContext.h" +#include "clang/Basic/SourceManager.h" + +#include "TransformationManager.h" + +using namespace clang; + +static const char* DescriptionMsg = +"Move declarations within a record (class or struct) in front of the record. \ +The pass supports functions, variables, typedefs and nested records. \n"; + +static RegisterTransformation<MemberToGlobal> + Trans("member-to-global", DescriptionMsg); + +class MemberToGlobal::CollectionVisitor : public + RecursiveASTVisitor<CollectionVisitor> { + +public: + explicit CollectionVisitor(MemberToGlobal *Instance) + : ConsumerInstance(Instance) + { } + + bool VisitRecordDecl(RecordDecl* RD) { + for (auto* D : RD->decls()) + if (ConsumerInstance->isValidDecl(RD, D)) + ConsumerInstance->ValidDecls.push_back(std::make_pair(RD, D)); + + return true; + } + +private: + MemberToGlobal *ConsumerInstance; +}; + +class MemberToGlobal::RewriteVisitor : public RecursiveASTVisitor<RewriteVisitor> { + +public: + explicit RewriteVisitor(MemberToGlobal *Instance) + : ConsumerInstance(Instance) + { } + + bool VisitMemberExpr(MemberExpr* ME) { + if (!ME->isImplicitAccess() && ConsumerInstance->isTheDecl(ME->getMemberDecl())) { + ConsumerInstance->TheRewriter.ReplaceText(ME->getOperatorLoc(), ","); + ConsumerInstance->TheRewriter.InsertTextBefore(ME->getSourceRange().getBegin(), "("); + ConsumerInstance->TheRewriter.InsertTextAfterToken(ME->getSourceRange().getEnd(), ")"); + } + + return true; + } + + bool VisitElaboratedTypeLoc(ElaboratedTypeLoc TL) { + // Replace CLASS::TYPE by TYPE + if (auto* TT = TL.getInnerType()->getAs<TypedefType>()) { + if (ConsumerInstance->isTheDecl(TT->getDecl())) { + ConsumerInstance->removeRecordQualifier(TL.getQualifierLoc()); + } + } else if (auto* TT = TL.getInnerType()->getAs<TagType>()) { + if (ConsumerInstance->isTheDecl(TT->getDecl())) { + ConsumerInstance->removeRecordQualifier(TL.getQualifierLoc()); + } + } + + return true; + } + + bool VisitDeclRefExpr(DeclRefExpr* DRE) { + if (ConsumerInstance->isTheDecl(DRE->getDecl())) { + ConsumerInstance->removeRecordQualifier(DRE->getQualifierLoc()); + } + + return true; + } + +private: + MemberToGlobal *ConsumerInstance; +}; + +void MemberToGlobal::Initialize(ASTContext &context) +{ + Transformation::Initialize(context); +} + +StringRef MemberToGlobal::GetText(SourceRange replacementRange) { + std::pair<FileID, unsigned> Begin = SrcManager->getDecomposedLoc(replacementRange.getBegin()); + std::pair<FileID, unsigned> End = SrcManager->getDecomposedLoc(replacementRange.getEnd()); + if (Begin.first != End.first) + return ""; + + StringRef MB = SrcManager->getBufferData(Begin.first); + return MB.substr(Begin.second, End.second - Begin.second + 1); +} + +void MemberToGlobal::removeRecordQualifier(const NestedNameSpecifierLoc& NNSLoc) { + if (!NNSLoc) + return; + + if (isTheRecordDecl(NNSLoc.getNestedNameSpecifier()->getAsRecordDecl())) { + SourceRange SR = NNSLoc.getLocalSourceRange(); + SR.setEnd(SR.getEnd().getLocWithOffset(1)); + + TheRewriter.RemoveText(SR); + } +} + +static bool replace(std::string& str, const std::string& from, const std::string& to) { + size_t start_pos = str.find(from); + if (start_pos == std::string::npos) + return false; + str.replace(start_pos, from.length(), to); + return true; +} + +void MemberToGlobal::HandleTranslationUnit(ASTContext &Ctx) +{ + CollectionVisitor(this).TraverseDecl(Ctx.getTranslationUnitDecl()); + + ValidInstanceNum = ValidDecls.size(); + + if (QueryInstanceOnly) + return; + + if (TransformationCounter > ValidInstanceNum) { + TransError = TransMaxInstanceError; + return; + } + + TheDecl = ValidDecls[TransformationCounter - 1].second; + TheRecordDecl = ValidDecls[TransformationCounter - 1].first; + Ctx.getDiagnostics().setSuppressAllDiagnostics(false); + + auto RecordBegin = TheRecordDecl->getSourceRange().getBegin(); + auto BeginLoc = TheDecl->getSourceRange().getBegin(); + auto EndLoc = RewriteHelper->getEndLocationUntil(TheDecl->getSourceRange().getEnd(), ';'); + + std::string Text = GetText(SourceRange(BeginLoc, EndLoc)).str(); + if (auto* VD = dyn_cast<VarDecl>(TheDecl)) { + if (VD->isStaticDataMember()) { + replace(Text, "static", "extern"); + } + } + + TheRewriter.InsertTextBefore(RecordBegin, Text + "\n"); + TheRewriter.RemoveText(SourceRange(BeginLoc, EndLoc)); + + for (auto* Redecl : TheDecl->redecls()) { + if (auto* DD = dyn_cast<DeclaratorDecl>(Redecl)) { + removeRecordQualifier(DD->getQualifierLoc()); + } + } + + RewriteVisitor(this).TraverseDecl(Ctx.getTranslationUnitDecl()); + + if (Ctx.getDiagnostics().hasErrorOccurred() || + Ctx.getDiagnostics().hasFatalErrorOccurred()) + TransError = TransInternalError; +} + +bool MemberToGlobal::isValidDecl(clang::RecordDecl* RD, clang::Decl* D) { + if (D->isImplicit()) + return false; + // No access specifier, e.g. public: + if (isa<AccessSpecDecl>(D)) + return false; + // No constructors or destructors + if (isa<CXXConstructorDecl>(D) || isa<CXXDestructorDecl>(D)) + return false; + // No friend declarations + if (isa<FriendDecl>(D)) + return false; + + if (isInIncludedFile(D)) + return false; + + return true; +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cvise-2.5.0+git.20220911.4c7ce7f/clang_delta/MemberToGlobal.h new/cvise-2.5.0+git.20220912.e2268dd/clang_delta/MemberToGlobal.h --- old/cvise-2.5.0+git.20220911.4c7ce7f/clang_delta/MemberToGlobal.h 1970-01-01 01:00:00.000000000 +0100 +++ new/cvise-2.5.0+git.20220912.e2268dd/clang_delta/MemberToGlobal.h 2022-09-12 09:46:31.000000000 +0200 @@ -0,0 +1,66 @@ +//===----------------------------------------------------------------------===// +// +// Copyright (c) 2012, 2013 The University of Utah +// All rights reserved. +// +// This file is distributed under the University of Illinois Open Source +// License. See the file COPYING for details. +// +//===----------------------------------------------------------------------===// + +#ifndef MEMBER_TO_GLOBAL_H +#define MEMBER_TO_GLOBAL_H + +#include <string> +#include "llvm/ADT/SmallVector.h" +#include "Transformation.h" +#include "CommonParameterRewriteVisitor.h" + +namespace clang { + class DeclGroupRef; + class ASTContext; + class FunctionDecl; + class ReturnStmt; + class ParmVarDecl; +} + +class ParamToGlobalASTVisitor; +class ParamToGlobalRewriteVisitor; +template<typename T, typename Trans> class CommonParameterRewriteVisitor; + +class MemberToGlobal : public Transformation { + + class CollectionVisitor; + class RewriteVisitor; +public: + + MemberToGlobal(const char *TransName, const char *Desc) + : Transformation(TransName, Desc) + { } + +private: + + virtual void Initialize(clang::ASTContext &context); + + virtual void HandleTranslationUnit(clang::ASTContext &Ctx); + + bool isValidDecl(clang::RecordDecl* FD, clang::Decl* D); + + llvm::StringRef GetText(clang::SourceRange range); + + void removeRecordQualifier(const clang::NestedNameSpecifierLoc& NNSLoc); + + bool isTheDecl(clang::Decl *D) { + return TheDecl->getCanonicalDecl() == D->getCanonicalDecl(); + } + + bool isTheRecordDecl(clang::Decl *D) { + return TheRecordDecl->getCanonicalDecl() == D->getCanonicalDecl(); + } + + std::vector<std::pair<clang::RecordDecl*, clang::Decl*>> ValidDecls; + + clang::Decl *TheDecl = nullptr; + clang::RecordDecl *TheRecordDecl = nullptr; +}; +#endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cvise-2.5.0+git.20220911.4c7ce7f/clang_delta/ReplaceDependentTypedef.cpp new/cvise-2.5.0+git.20220912.e2268dd/clang_delta/ReplaceDependentTypedef.cpp --- old/cvise-2.5.0+git.20220911.4c7ce7f/clang_delta/ReplaceDependentTypedef.cpp 2022-09-11 20:45:54.000000000 +0200 +++ new/cvise-2.5.0+git.20220912.e2268dd/clang_delta/ReplaceDependentTypedef.cpp 2022-09-12 09:46:31.000000000 +0200 @@ -54,7 +54,7 @@ : ConsumerInstance(Instance) { } - bool VisitTypedefDecl(TypedefDecl *D); + bool VisitTypedefNameDecl(TypedefNameDecl *D); private: ReplaceDependentTypedef *ConsumerInstance; @@ -62,7 +62,7 @@ }; bool -ReplaceDependentTypedefCollectionVisitor::VisitTypedefDecl(TypedefDecl *D) +ReplaceDependentTypedefCollectionVisitor::VisitTypedefNameDecl(TypedefNameDecl *D) { ConsumerInstance->handleOneTypedefDecl(D); return true; @@ -125,7 +125,7 @@ return false; } -void ReplaceDependentTypedef::handleOneTypedefDecl(const TypedefDecl *D) +void ReplaceDependentTypedef::handleOneTypedefDecl(const TypedefNameDecl *D) { if (isInIncludedFile(D) || D->getBeginLoc().isInvalid()) return; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cvise-2.5.0+git.20220911.4c7ce7f/clang_delta/ReplaceDependentTypedef.h new/cvise-2.5.0+git.20220912.e2268dd/clang_delta/ReplaceDependentTypedef.h --- old/cvise-2.5.0+git.20220911.4c7ce7f/clang_delta/ReplaceDependentTypedef.h 2022-09-11 20:45:54.000000000 +0200 +++ new/cvise-2.5.0+git.20220912.e2268dd/clang_delta/ReplaceDependentTypedef.h 2022-09-12 09:46:31.000000000 +0200 @@ -19,7 +19,7 @@ class ASTContext; class QualType; class Type; - class TypedefDecl; + class TypedefNameDecl; class CXXRecordDecl; } @@ -49,7 +49,7 @@ virtual void HandleTranslationUnit(clang::ASTContext &Ctx); - void handleOneTypedefDecl(const clang::TypedefDecl *D); + void handleOneTypedefDecl(const clang::TypedefNameDecl *D); bool isValidType(const clang::QualType &QT); @@ -59,7 +59,7 @@ std::string TheTyName; - const clang::TypedefDecl *TheTypedefDecl; + const clang::TypedefNameDecl *TheTypedefDecl; bool NeedTypenameKeyword; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cvise-2.5.0+git.20220911.4c7ce7f/clang_delta/ReplaceOneLevelTypedefType.cpp new/cvise-2.5.0+git.20220912.e2268dd/clang_delta/ReplaceOneLevelTypedefType.cpp --- old/cvise-2.5.0+git.20220911.4c7ce7f/clang_delta/ReplaceOneLevelTypedefType.cpp 2022-09-11 20:45:54.000000000 +0200 +++ new/cvise-2.5.0+git.20220912.e2268dd/clang_delta/ReplaceOneLevelTypedefType.cpp 2022-09-12 09:46:31.000000000 +0200 @@ -107,7 +107,7 @@ void ReplaceOneLevelTypedefType::removeTypedefs() { - for (TypedefDecl::redecl_iterator I = TheTypedefDecl->redecls_begin(), + for (TypedefNameDecl::redecl_iterator I = TheTypedefDecl->redecls_begin(), E = TheTypedefDecl->redecls_end(); I != E; ++I) { SourceRange Range = (*I)->getSourceRange(); if (Range.isValid()) { @@ -122,11 +122,11 @@ if (isInIncludedFile(TLoc.getBeginLoc())) return; const TypedefType *TdefTy = TLoc.getTypePtr(); - const TypedefDecl *TdefD = dyn_cast<TypedefDecl>(TdefTy->getDecl()); + const TypedefNameDecl *TdefD = dyn_cast<TypedefNameDecl>(TdefTy->getDecl()); if (!TdefD || TdefD->getBeginLoc().isInvalid()) return; - const TypedefDecl *CanonicalD = - dyn_cast<TypedefDecl>(TdefD->getCanonicalDecl()); + const TypedefNameDecl *CanonicalD = + dyn_cast<TypedefNameDecl>(TdefD->getCanonicalDecl()); TypedefTypeLocVector *LocVec = AllTypeDecls[CanonicalD]; if (!LocVec) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cvise-2.5.0+git.20220911.4c7ce7f/clang_delta/ReplaceOneLevelTypedefType.h new/cvise-2.5.0+git.20220912.e2268dd/clang_delta/ReplaceOneLevelTypedefType.h --- old/cvise-2.5.0+git.20220911.4c7ce7f/clang_delta/ReplaceOneLevelTypedefType.h 2022-09-11 20:45:54.000000000 +0200 +++ new/cvise-2.5.0+git.20220912.e2268dd/clang_delta/ReplaceOneLevelTypedefType.h 2022-09-12 09:46:31.000000000 +0200 @@ -19,7 +19,7 @@ namespace clang { class DeclGroupRef; class ASTContext; - class TypedefDecl; + class TypedefNameDecl; } class ReplaceOneLevelTypedefTypeCollectionVisitor; @@ -40,7 +40,7 @@ typedef llvm::SmallVector<clang::TypedefTypeLoc, 10> TypedefTypeLocVector; - typedef llvm::MapVector<const clang::TypedefDecl *, + typedef llvm::MapVector<const clang::TypedefNameDecl *, TypedefTypeLocVector *> TypedefDeclToRefMap; @@ -62,7 +62,7 @@ ReplaceOneLevelTypedefTypeCollectionVisitor *CollectionVisitor; - const clang::TypedefDecl *TheTypedefDecl; + const clang::TypedefNameDecl *TheTypedefDecl; // Unimplemented ReplaceOneLevelTypedefType(void); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cvise-2.5.0+git.20220911.4c7ce7f/clang_delta/ReplaceSimpleTypedef.cpp new/cvise-2.5.0+git.20220912.e2268dd/clang_delta/ReplaceSimpleTypedef.cpp --- old/cvise-2.5.0+git.20220911.4c7ce7f/clang_delta/ReplaceSimpleTypedef.cpp 2022-09-11 20:45:54.000000000 +0200 +++ new/cvise-2.5.0+git.20220912.e2268dd/clang_delta/ReplaceSimpleTypedef.cpp 2022-09-12 09:46:31.000000000 +0200 @@ -41,7 +41,7 @@ : ConsumerInstance(Instance) { } - bool VisitTypedefDecl(TypedefDecl *D); + bool VisitTypedefNameDecl(TypedefNameDecl*D); private: ReplaceSimpleTypedef *ConsumerInstance; @@ -65,11 +65,11 @@ }; -bool ReplaceSimpleTypedefCollectionVisitor::VisitTypedefDecl(TypedefDecl *TdefD) +bool ReplaceSimpleTypedefCollectionVisitor::VisitTypedefNameDecl(TypedefNameDecl*TdefD) { if (ConsumerInstance->isInIncludedFile(TdefD)) return true; - TypedefDecl *CanonicalD = dyn_cast<TypedefDecl>(TdefD->getCanonicalDecl()); + TypedefNameDecl*CanonicalD = dyn_cast<TypedefNameDecl>(TdefD->getCanonicalDecl()); if (!ConsumerInstance->VisitedTypedefDecls.count(CanonicalD)) { ConsumerInstance->handleOneTypedefDecl(CanonicalD); ConsumerInstance->VisitedTypedefDecls.insert(CanonicalD); @@ -84,11 +84,11 @@ return true; const TypedefType *TdefTy = Loc.getTypePtr(); - const TypedefDecl *TdefD = dyn_cast<TypedefDecl>(TdefTy->getDecl()); + const TypedefNameDecl*TdefD = dyn_cast<TypedefNameDecl>(TdefTy->getDecl()); if (!TdefD || TdefD->getBeginLoc().isInvalid()) return true; - if (dyn_cast<TypedefDecl>(TdefD->getCanonicalDecl()) == + if (dyn_cast<TypedefNameDecl>(TdefD->getCanonicalDecl()) == ConsumerInstance->TheTypedefDecl) { SourceRange Range = Loc.getSourceRange(); ConsumerInstance->TheRewriter.ReplaceText(Range, ConsumerInstance->TyName); @@ -112,8 +112,8 @@ if (!TdefTy) return true; - const TypedefDecl *TdefD = dyn_cast<TypedefDecl>(TdefTy->getDecl()); - if (!TdefD || (dyn_cast<TypedefDecl>(TdefD->getCanonicalDecl()) != + const TypedefNameDecl*TdefD = dyn_cast<TypedefNameDecl>(TdefTy->getDecl()); + if (!TdefD || (dyn_cast<TypedefNameDecl>(TdefD->getCanonicalDecl()) != ConsumerInstance->TheTypedefDecl)) { return true; } @@ -161,7 +161,7 @@ void ReplaceSimpleTypedef::removeTypedefs() { - for (TypedefDecl::redecl_iterator I = TheTypedefDecl->redecls_begin(), + for (TypedefNameDecl::redecl_iterator I = TheTypedefDecl->redecls_begin(), E = TheTypedefDecl->redecls_end(); I != E; ++I) { SourceRange Range = (*I)->getSourceRange(); if (Range.isValid()) { @@ -171,7 +171,7 @@ } } -bool ReplaceSimpleTypedef::isValidType(const Type *Ty, const TypedefDecl *D) +bool ReplaceSimpleTypedef::isValidType(const Type *Ty, const TypedefNameDecl *D) { if (Ty->isEnumeralType() || Ty->isUnionType()) return true; @@ -200,7 +200,7 @@ return false; } -void ReplaceSimpleTypedef::handleOneTypedefDecl(const TypedefDecl *CanonicalD) +void ReplaceSimpleTypedef::handleOneTypedefDecl(const TypedefNameDecl* CanonicalD) { // omit some typedefs injected by Clang if (CanonicalD->getBeginLoc().isInvalid()) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cvise-2.5.0+git.20220911.4c7ce7f/clang_delta/ReplaceSimpleTypedef.h new/cvise-2.5.0+git.20220912.e2268dd/clang_delta/ReplaceSimpleTypedef.h --- old/cvise-2.5.0+git.20220911.4c7ce7f/clang_delta/ReplaceSimpleTypedef.h 2022-09-11 20:45:54.000000000 +0200 +++ new/cvise-2.5.0+git.20220912.e2268dd/clang_delta/ReplaceSimpleTypedef.h 2022-09-12 09:46:31.000000000 +0200 @@ -17,7 +17,7 @@ namespace clang { class DeclGroupRef; class ASTContext; - class TypedefDecl; + class TypedefNameDecl; } class ReplaceSimpleTypedefCollectionVisitor; @@ -40,15 +40,15 @@ private: - typedef llvm::SmallPtrSet<const clang::TypedefDecl *, 20> TypedefDeclsSet; + typedef llvm::SmallPtrSet<const clang::TypedefNameDecl*, 20> TypedefDeclsSet; virtual void Initialize(clang::ASTContext &context); virtual void HandleTranslationUnit(clang::ASTContext &Ctx); - void handleOneTypedefDecl(const clang::TypedefDecl *CanonicalD); + void handleOneTypedefDecl(const clang::TypedefNameDecl* CanonicalD); - bool isValidType(const clang::Type *Ty, const clang::TypedefDecl *D); + bool isValidType(const clang::Type *Ty, const clang::TypedefNameDecl *D); void removeTypedefs(); @@ -58,7 +58,7 @@ ReplaceSimpleTypedefRewriteVisitor *RewriteVisitor; - const clang::TypedefDecl *TheTypedefDecl; + const clang::TypedefNameDecl *TheTypedefDecl; std::string TyName; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cvise-2.5.0+git.20220911.4c7ce7f/clang_delta/SimplifyDependentTypedef.cpp new/cvise-2.5.0+git.20220912.e2268dd/clang_delta/SimplifyDependentTypedef.cpp --- old/cvise-2.5.0+git.20220911.4c7ce7f/clang_delta/SimplifyDependentTypedef.cpp 2022-09-11 20:45:54.000000000 +0200 +++ new/cvise-2.5.0+git.20220912.e2268dd/clang_delta/SimplifyDependentTypedef.cpp 2022-09-12 09:46:31.000000000 +0200 @@ -46,7 +46,7 @@ : ConsumerInstance(Instance) { } - bool VisitTypedefDecl(TypedefDecl *D); + bool VisitTypedefNameDecl(TypedefNameDecl *D); private: SimplifyDependentTypedef *ConsumerInstance; @@ -85,7 +85,7 @@ bool IsValidType; }; -bool DependentTypedefCollectionVisitor::VisitTypedefDecl(TypedefDecl *D) +bool DependentTypedefCollectionVisitor::VisitTypedefNameDecl(TypedefNameDecl *D) { ConsumerInstance->handleOneTypedefDecl(D); return true; @@ -154,13 +154,13 @@ TheRewriter.ReplaceText(SourceRange(LocStart, LocEnd), ParmName+" "); } -void SimplifyDependentTypedef::handleOneTypedefDecl(const TypedefDecl *D) +void SimplifyDependentTypedef::handleOneTypedefDecl(const TypedefNameDecl *D) { if (isInIncludedFile(D)) return; - const TypedefDecl *CanonicalD = dyn_cast<TypedefDecl>(D->getCanonicalDecl()); - TransAssert(CanonicalD && "Bad TypedefDecl!"); + const TypedefNameDecl *CanonicalD = dyn_cast<TypedefNameDecl>(D->getCanonicalDecl()); + TransAssert(CanonicalD && "Bad TypedefNameDecl!"); if (VisitedTypedefDecls.count(CanonicalD)) return; VisitedTypedefDecls.insert(CanonicalD); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cvise-2.5.0+git.20220911.4c7ce7f/clang_delta/SimplifyDependentTypedef.h new/cvise-2.5.0+git.20220912.e2268dd/clang_delta/SimplifyDependentTypedef.h --- old/cvise-2.5.0+git.20220911.4c7ce7f/clang_delta/SimplifyDependentTypedef.h 2022-09-11 20:45:54.000000000 +0200 +++ new/cvise-2.5.0+git.20220912.e2268dd/clang_delta/SimplifyDependentTypedef.h 2022-09-12 09:46:31.000000000 +0200 @@ -17,7 +17,7 @@ namespace clang { class DeclGroupRef; class ASTContext; - class TypedefDecl; + class TypedefNameDecl; class ClassTemplateDecl; class TemplateTypeParmDecl; } @@ -41,7 +41,7 @@ private: - typedef llvm::SmallPtrSet<const clang::TypedefDecl *, 20> TypedefDeclsSet; + typedef llvm::SmallPtrSet<const clang::TypedefNameDecl *, 20> TypedefDeclsSet; typedef llvm::SmallPtrSet<const clang::Type *, 5> TemplateTypeParmTypeSet; @@ -49,7 +49,7 @@ virtual void HandleTranslationUnit(clang::ASTContext &Ctx); - void handleOneTypedefDecl(const clang::TypedefDecl *D); + void handleOneTypedefDecl(const clang::TypedefNameDecl *D); void rewriteTypedefDecl(void); @@ -61,7 +61,7 @@ const clang::TemplateTypeParmDecl *FirstTmplTypeParmD; - const clang::TypedefDecl *TheTypedefDecl; + const clang::TypedefNameDecl *TheTypedefDecl; // Unimplemented SimplifyDependentTypedef(void); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cvise-2.5.0+git.20220911.4c7ce7f/clang_delta/Transformation.cpp new/cvise-2.5.0+git.20220912.e2268dd/clang_delta/Transformation.cpp --- old/cvise-2.5.0+git.20220911.4c7ce7f/clang_delta/Transformation.cpp 2022-09-11 20:45:54.000000000 +0200 +++ new/cvise-2.5.0+git.20220912.e2268dd/clang_delta/Transformation.cpp 2022-09-12 09:46:31.000000000 +0200 @@ -977,7 +977,7 @@ Str = ""; for (DeclContext::decl_iterator I = CXXRD->decls_begin(), E = CXXRD->decls_end(); I != E; ++I) { - const TypedefDecl *D = dyn_cast<TypedefDecl>(*I); + const TypedefNameDecl *D = dyn_cast<TypedefNameDecl>(*I); if (!D || (D->getNameAsString() != Name)) continue; const Type *UnderlyingTy = D->getUnderlyingType().getTypePtr(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cvise-2.5.0+git.20220911.4c7ce7f/clang_delta/tests/member-to-global/test1.cc new/cvise-2.5.0+git.20220912.e2268dd/clang_delta/tests/member-to-global/test1.cc --- old/cvise-2.5.0+git.20220911.4c7ce7f/clang_delta/tests/member-to-global/test1.cc 1970-01-01 01:00:00.000000000 +0100 +++ new/cvise-2.5.0+git.20220912.e2268dd/clang_delta/tests/member-to-global/test1.cc 2022-09-12 09:46:31.000000000 +0200 @@ -0,0 +1,12 @@ + +namespace n { + +class C { +public: + void f(); +}; + +} + +void n::C::f() { +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cvise-2.5.0+git.20220911.4c7ce7f/clang_delta/tests/member-to-global/test1.output new/cvise-2.5.0+git.20220912.e2268dd/clang_delta/tests/member-to-global/test1.output --- old/cvise-2.5.0+git.20220911.4c7ce7f/clang_delta/tests/member-to-global/test1.output 1970-01-01 01:00:00.000000000 +0100 +++ new/cvise-2.5.0+git.20220912.e2268dd/clang_delta/tests/member-to-global/test1.output 2022-09-12 09:46:31.000000000 +0200 @@ -0,0 +1,13 @@ + +namespace n { + +void f(); +class C { +public: + +}; + +} + +void n::f() { +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cvise-2.5.0+git.20220911.4c7ce7f/clang_delta/tests/member-to-global/test2.cc new/cvise-2.5.0+git.20220912.e2268dd/clang_delta/tests/member-to-global/test2.cc --- old/cvise-2.5.0+git.20220911.4c7ce7f/clang_delta/tests/member-to-global/test2.cc 1970-01-01 01:00:00.000000000 +0100 +++ new/cvise-2.5.0+git.20220912.e2268dd/clang_delta/tests/member-to-global/test2.cc 2022-09-12 09:46:31.000000000 +0200 @@ -0,0 +1,9 @@ + +class C { +public: + int& f(); +}; + +void func(C& c1, C& c2) { + c1.f() = c2.f(); +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cvise-2.5.0+git.20220911.4c7ce7f/clang_delta/tests/member-to-global/test2.output new/cvise-2.5.0+git.20220912.e2268dd/clang_delta/tests/member-to-global/test2.output --- old/cvise-2.5.0+git.20220911.4c7ce7f/clang_delta/tests/member-to-global/test2.output 1970-01-01 01:00:00.000000000 +0100 +++ new/cvise-2.5.0+git.20220912.e2268dd/clang_delta/tests/member-to-global/test2.output 2022-09-12 09:46:31.000000000 +0200 @@ -0,0 +1,10 @@ + +int& f(); +class C { +public: + +}; + +void func(C& c1, C& c2) { + (c1,f)() = (c2,f)(); +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cvise-2.5.0+git.20220911.4c7ce7f/clang_delta/tests/member-to-global/test3.cc new/cvise-2.5.0+git.20220912.e2268dd/clang_delta/tests/member-to-global/test3.cc --- old/cvise-2.5.0+git.20220911.4c7ce7f/clang_delta/tests/member-to-global/test3.cc 1970-01-01 01:00:00.000000000 +0100 +++ new/cvise-2.5.0+git.20220912.e2268dd/clang_delta/tests/member-to-global/test3.cc 2022-09-12 09:46:31.000000000 +0200 @@ -0,0 +1,9 @@ + +class C { +public: + int i; +}; + +int func(C& c) { + return c.i; +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cvise-2.5.0+git.20220911.4c7ce7f/clang_delta/tests/member-to-global/test3.output new/cvise-2.5.0+git.20220912.e2268dd/clang_delta/tests/member-to-global/test3.output --- old/cvise-2.5.0+git.20220911.4c7ce7f/clang_delta/tests/member-to-global/test3.output 1970-01-01 01:00:00.000000000 +0100 +++ new/cvise-2.5.0+git.20220912.e2268dd/clang_delta/tests/member-to-global/test3.output 2022-09-12 09:46:31.000000000 +0200 @@ -0,0 +1,10 @@ + +int i; +class C { +public: + +}; + +int func(C& c) { + return (c,i); +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cvise-2.5.0+git.20220911.4c7ce7f/clang_delta/tests/member-to-global/test4.cc new/cvise-2.5.0+git.20220912.e2268dd/clang_delta/tests/member-to-global/test4.cc --- old/cvise-2.5.0+git.20220911.4c7ce7f/clang_delta/tests/member-to-global/test4.cc 1970-01-01 01:00:00.000000000 +0100 +++ new/cvise-2.5.0+git.20220912.e2268dd/clang_delta/tests/member-to-global/test4.cc 2022-09-12 09:46:31.000000000 +0200 @@ -0,0 +1,11 @@ + +class C { +public: + static int s; +}; + +int C::s = 5; + +int func() { + return C::s; +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cvise-2.5.0+git.20220911.4c7ce7f/clang_delta/tests/member-to-global/test4.output new/cvise-2.5.0+git.20220912.e2268dd/clang_delta/tests/member-to-global/test4.output --- old/cvise-2.5.0+git.20220911.4c7ce7f/clang_delta/tests/member-to-global/test4.output 1970-01-01 01:00:00.000000000 +0100 +++ new/cvise-2.5.0+git.20220912.e2268dd/clang_delta/tests/member-to-global/test4.output 2022-09-12 09:46:31.000000000 +0200 @@ -0,0 +1,12 @@ + +extern int s; +class C { +public: + +}; + +int s = 5; + +int func() { + return s; +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cvise-2.5.0+git.20220911.4c7ce7f/clang_delta/tests/member-to-global/test5.cc new/cvise-2.5.0+git.20220912.e2268dd/clang_delta/tests/member-to-global/test5.cc --- old/cvise-2.5.0+git.20220911.4c7ce7f/clang_delta/tests/member-to-global/test5.cc 1970-01-01 01:00:00.000000000 +0100 +++ new/cvise-2.5.0+git.20220912.e2268dd/clang_delta/tests/member-to-global/test5.cc 2022-09-12 09:46:31.000000000 +0200 @@ -0,0 +1,9 @@ + +class C { +public: + using x = int; +}; + +void func() { + C::x v; +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cvise-2.5.0+git.20220911.4c7ce7f/clang_delta/tests/member-to-global/test5.output new/cvise-2.5.0+git.20220912.e2268dd/clang_delta/tests/member-to-global/test5.output --- old/cvise-2.5.0+git.20220911.4c7ce7f/clang_delta/tests/member-to-global/test5.output 1970-01-01 01:00:00.000000000 +0100 +++ new/cvise-2.5.0+git.20220912.e2268dd/clang_delta/tests/member-to-global/test5.output 2022-09-12 09:46:31.000000000 +0200 @@ -0,0 +1,10 @@ + +using x = int; +class C { +public: + +}; + +void func() { + x v; +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cvise-2.5.0+git.20220911.4c7ce7f/clang_delta/tests/member-to-global/test6.cc new/cvise-2.5.0+git.20220912.e2268dd/clang_delta/tests/member-to-global/test6.cc --- old/cvise-2.5.0+git.20220911.4c7ce7f/clang_delta/tests/member-to-global/test6.cc 1970-01-01 01:00:00.000000000 +0100 +++ new/cvise-2.5.0+git.20220912.e2268dd/clang_delta/tests/member-to-global/test6.cc 2022-09-12 09:46:31.000000000 +0200 @@ -0,0 +1,10 @@ + +class C { +public: + struct x { + }; +}; + +void func() { + C::x v; +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cvise-2.5.0+git.20220911.4c7ce7f/clang_delta/tests/member-to-global/test6.output new/cvise-2.5.0+git.20220912.e2268dd/clang_delta/tests/member-to-global/test6.output --- old/cvise-2.5.0+git.20220911.4c7ce7f/clang_delta/tests/member-to-global/test6.output 1970-01-01 01:00:00.000000000 +0100 +++ new/cvise-2.5.0+git.20220912.e2268dd/clang_delta/tests/member-to-global/test6.output 2022-09-12 09:46:31.000000000 +0200 @@ -0,0 +1,11 @@ + +struct x { + }; +class C { +public: + +}; + +void func() { + x v; +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cvise-2.5.0+git.20220911.4c7ce7f/clang_delta/tests/replace-simple-typedef/test1.cc new/cvise-2.5.0+git.20220912.e2268dd/clang_delta/tests/replace-simple-typedef/test1.cc --- old/cvise-2.5.0+git.20220911.4c7ce7f/clang_delta/tests/replace-simple-typedef/test1.cc 1970-01-01 01:00:00.000000000 +0100 +++ new/cvise-2.5.0+git.20220912.e2268dd/clang_delta/tests/replace-simple-typedef/test1.cc 2022-09-12 09:46:31.000000000 +0200 @@ -0,0 +1,4 @@ + +typedef int a; + +a var; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cvise-2.5.0+git.20220911.4c7ce7f/clang_delta/tests/replace-simple-typedef/test1.output new/cvise-2.5.0+git.20220912.e2268dd/clang_delta/tests/replace-simple-typedef/test1.output --- old/cvise-2.5.0+git.20220911.4c7ce7f/clang_delta/tests/replace-simple-typedef/test1.output 1970-01-01 01:00:00.000000000 +0100 +++ new/cvise-2.5.0+git.20220912.e2268dd/clang_delta/tests/replace-simple-typedef/test1.output 2022-09-12 09:46:31.000000000 +0200 @@ -0,0 +1,4 @@ + + + +int var; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cvise-2.5.0+git.20220911.4c7ce7f/clang_delta/tests/replace-simple-typedef/test2.cc new/cvise-2.5.0+git.20220912.e2268dd/clang_delta/tests/replace-simple-typedef/test2.cc --- old/cvise-2.5.0+git.20220911.4c7ce7f/clang_delta/tests/replace-simple-typedef/test2.cc 1970-01-01 01:00:00.000000000 +0100 +++ new/cvise-2.5.0+git.20220912.e2268dd/clang_delta/tests/replace-simple-typedef/test2.cc 2022-09-12 09:46:31.000000000 +0200 @@ -0,0 +1,4 @@ + +using a = int; + +a var; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cvise-2.5.0+git.20220911.4c7ce7f/clang_delta/tests/replace-simple-typedef/test2.output new/cvise-2.5.0+git.20220912.e2268dd/clang_delta/tests/replace-simple-typedef/test2.output --- old/cvise-2.5.0+git.20220911.4c7ce7f/clang_delta/tests/replace-simple-typedef/test2.output 1970-01-01 01:00:00.000000000 +0100 +++ new/cvise-2.5.0+git.20220912.e2268dd/clang_delta/tests/replace-simple-typedef/test2.output 2022-09-12 09:46:31.000000000 +0200 @@ -0,0 +1,4 @@ + + + +int var; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cvise-2.5.0+git.20220911.4c7ce7f/clang_delta/tests/test_clang_delta.py new/cvise-2.5.0+git.20220912.e2268dd/clang_delta/tests/test_clang_delta.py --- old/cvise-2.5.0+git.20220911.4c7ce7f/clang_delta/tests/test_clang_delta.py 2022-09-11 20:45:54.000000000 +0200 +++ new/cvise-2.5.0+git.20220912.e2268dd/clang_delta/tests/test_clang_delta.py 2022-09-12 09:46:31.000000000 +0200 @@ -562,3 +562,27 @@ def test_class_template_to_class(self): self.check_clang_delta('class-template-to-class/test1.cc', '--transformation=class-template-to-class --counter=1') + + def test_replace_simple_typedef_test1(self): + self.check_clang_delta('replace-simple-typedef/test1.cc', '--transformation=replace-simple-typedef --counter=1') + + def test_replace_simple_typedef_test2(self): + self.check_clang_delta('replace-simple-typedef/test2.cc', '--transformation=replace-simple-typedef --counter=1') + + def test_member_to_global_test1(self): + self.check_clang_delta('member-to-global/test1.cc', '--transformation=member-to-global --counter=1') + + def test_member_to_global_test2(self): + self.check_clang_delta('member-to-global/test2.cc', '--transformation=member-to-global --counter=1') + + def test_member_to_global_test3(self): + self.check_clang_delta('member-to-global/test3.cc', '--transformation=member-to-global --counter=1') + + def test_member_to_global_test4(self): + self.check_clang_delta('member-to-global/test4.cc', '--transformation=member-to-global --counter=1') + + def test_member_to_global_test5(self): + self.check_clang_delta('member-to-global/test5.cc', '--transformation=member-to-global --counter=1') + + def test_member_to_global_test6(self): + self.check_clang_delta('member-to-global/test6.cc', '--transformation=member-to-global --counter=1') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cvise-2.5.0+git.20220911.4c7ce7f/cvise/pass_groups/all.json new/cvise-2.5.0+git.20220912.e2268dd/cvise/pass_groups/all.json --- old/cvise-2.5.0+git.20220911.4c7ce7f/cvise/pass_groups/all.json 2022-09-11 20:45:54.000000000 +0200 +++ new/cvise-2.5.0+git.20220912.e2268dd/cvise/pass_groups/all.json 2022-09-12 09:46:31.000000000 +0200 @@ -105,6 +105,7 @@ {"pass": "clang", "arg": "vector-to-array", "c": true }, {"pass": "clang", "arg": "remove-try-catch", "c": true }, {"pass": "clang", "arg": "class-to-struct", "c": true }, + {"pass": "clang", "arg": "member-to-global", "c": true }, {"pass": "lines", "arg": "0"}, {"pass": "lines", "arg": "1"}, {"pass": "lines", "arg": "2"},