Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package cvise for openSUSE:Factory checked in at 2021-03-28 11:54:24 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/cvise (Old) and /work/SRC/openSUSE:Factory/.cvise.new.2401 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "cvise" Sun Mar 28 11:54:24 2021 rev:30 rq:881309 version:2.3.0+git.20210325.1a5f305 Changes: -------- --- /work/SRC/openSUSE:Factory/cvise/cvise.changes 2021-03-21 23:20:29.772741846 +0100 +++ /work/SRC/openSUSE:Factory/.cvise.new.2401/cvise.changes 2021-03-28 11:56:26.968228587 +0200 @@ -1,0 +2,6 @@ +Thu Mar 25 12:26:03 UTC 2021 - mli...@suse.cz + +- Update to version 2.3.0+git.20210325.1a5f305: + * Add new clang pass: class-to-struct (#50). + +------------------------------------------------------------------- Old: ---- cvise-2.3.0+git.20210320.0ff4a84.tar.xz New: ---- cvise-2.3.0+git.20210325.1a5f305.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ cvise.spec ++++++ --- /var/tmp/diff_new_pack.AjaR24/_old 2021-03-28 11:56:27.572229122 +0200 +++ /var/tmp/diff_new_pack.AjaR24/_new 2021-03-28 11:56:27.572229122 +0200 @@ -17,7 +17,7 @@ Name: cvise -Version: 2.3.0+git.20210320.0ff4a84 +Version: 2.3.0+git.20210325.1a5f305 Release: 0 Summary: Super-parallel Python port of the C-Reduce License: BSD-3-Clause ++++++ cvise-2.3.0+git.20210320.0ff4a84.tar.xz -> cvise-2.3.0+git.20210325.1a5f305.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cvise-2.3.0+git.20210320.0ff4a84/clang_delta/CMakeLists.txt new/cvise-2.3.0+git.20210325.1a5f305/clang_delta/CMakeLists.txt --- old/cvise-2.3.0+git.20210320.0ff4a84/clang_delta/CMakeLists.txt 2021-03-20 20:44:38.000000000 +0100 +++ new/cvise-2.3.0+git.20210325.1a5f305/clang_delta/CMakeLists.txt 2021-03-25 13:22:45.000000000 +0100 @@ -52,6 +52,8 @@ "/tests/callexpr-to-value/test1.output" "/tests/callexpr-to-value/test2.c" "/tests/callexpr-to-value/test2.output" + "/tests/class-to-struct/class-to-struct1.C" + "/tests/class-to-struct/class-to-struct1.output" "/tests/copy-propagation/copy1.cpp" "/tests/copy-propagation/copy1.output" "/tests/copy-propagation/copy2.cpp" @@ -417,6 +419,8 @@ ClangDelta.cpp ClassTemplateToClass.cpp ClassTemplateToClass.h + ClassToStruct.cpp + ClassToStruct.h CombineGlobalVarDecl.cpp CombineGlobalVarDecl.h CombineLocalVarDecl.cpp diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cvise-2.3.0+git.20210320.0ff4a84/clang_delta/ClassToStruct.cpp new/cvise-2.3.0+git.20210325.1a5f305/clang_delta/ClassToStruct.cpp --- old/cvise-2.3.0+git.20210320.0ff4a84/clang_delta/ClassToStruct.cpp 1970-01-01 01:00:00.000000000 +0100 +++ new/cvise-2.3.0+git.20210325.1a5f305/clang_delta/ClassToStruct.cpp 2021-03-25 13:22:45.000000000 +0100 @@ -0,0 +1,113 @@ +//===----------------------------------------------------------------------===// +// +// Copyright (c) 2012, 2013, 2015, 2016, 2017, 2019 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 "ClassToStruct.h" + +#include "clang/Basic/SourceManager.h" +#include "clang/AST/RecursiveASTVisitor.h" +#include "clang/AST/ASTContext.h" +#include "clang/Lex/Lexer.h" + +#include "TransformationManager.h" + +using namespace clang; + +static const char *DescriptionMsg = +"The pass replaces class with struct keyword. \n"; + +static RegisterTransformation<ClassToStruct> + Trans("class-to-struct", DescriptionMsg); + +class ClassToStructVisitor : public + RecursiveASTVisitor<ClassToStructVisitor> { + +public: + explicit ClassToStructVisitor( + ClassToStruct *Instance) + : ConsumerInstance(Instance) + { } + + bool VisitCXXRecordDecl(CXXRecordDecl *CXXRD); + +private: + ClassToStruct *ConsumerInstance; +}; + +bool ClassToStructVisitor::VisitCXXRecordDecl( + CXXRecordDecl *CXXRD) +{ + if (!CXXRD->isClass()) + return true; + ConsumerInstance->CXXRDDefSet.insert(CXXRD->getDefinition()); + return true; +} + +void ClassToStruct::Initialize(ASTContext &context) +{ + Transformation::Initialize(context); + CollectionVisitor = new ClassToStructVisitor(this); +} + +void ClassToStruct::HandleTranslationUnit(ASTContext &Ctx) +{ + if (TransformationManager::isCLangOpt() || + TransformationManager::isOpenCLLangOpt()) { + ValidInstanceNum = 0; + } + else { + CollectionVisitor->TraverseDecl(Ctx.getTranslationUnitDecl()); + analyzeCXXRDSet(); + } + + if (QueryInstanceOnly) + return; + + if (TransformationCounter > ValidInstanceNum) { + TransError = TransMaxInstanceError; + return; + } + + Ctx.getDiagnostics().setSuppressAllDiagnostics(false); + replaceClassWithStruct(); + + if (Ctx.getDiagnostics().hasErrorOccurred() || + Ctx.getDiagnostics().hasFatalErrorOccurred()) + TransError = TransInternalError; +} + +void ClassToStruct::analyzeCXXRDSet() +{ + for (CXXRecordDeclSetVector::iterator I = CXXRDDefSet.begin(), + E = CXXRDDefSet.end(); I != E; ++I) { + const CXXRecordDecl *Def = (*I); + ValidInstanceNum++; + if (ValidInstanceNum == TransformationCounter) + TheCXXRDDef = Def; + } +} + +void ClassToStruct::replaceClassWithStruct() +{ + TransAssert(TheCXXRDDef && "NULL Base CXXRD!"); + SourceLocation LocStart = TheCXXRDDef->getBeginLoc(); + SourceLocation LocEnd = LocStart.getLocWithOffset(strlen("class")); + TransAssert(LocEnd.isValid() && "Invalid Location!"); + TheRewriter.ReplaceText(SourceRange(LocStart, LocEnd), "struct"); +} + +ClassToStruct::~ClassToStruct(void) +{ + delete CollectionVisitor; +} + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cvise-2.3.0+git.20210320.0ff4a84/clang_delta/ClassToStruct.h new/cvise-2.3.0+git.20210325.1a5f305/clang_delta/ClassToStruct.h --- old/cvise-2.3.0+git.20210320.0ff4a84/clang_delta/ClassToStruct.h 1970-01-01 01:00:00.000000000 +0100 +++ new/cvise-2.3.0+git.20210325.1a5f305/clang_delta/ClassToStruct.h 2021-03-25 13:22:45.000000000 +0100 @@ -0,0 +1,65 @@ +//===----------------------------------------------------------------------===// +// +// Copyright (c) 2012, 2013, 2016 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 CLASS_TO_STRUCT_H +#define CLASS_TO_STRUCT_H + +#include "llvm/ADT/SetVector.h" +#include "llvm/ADT/SmallPtrSet.h" +#include "Transformation.h" + +namespace clang { + class DeclGroupRef; + class ASTContext; + class CXXRecordDecl; +} + +class ClassToStructVisitor; + +class ClassToStruct : public Transformation { +friend class ClassToStructVisitor; + +public: + ClassToStruct(const char *TransName, const char *Desc) + : Transformation(TransName, Desc), + CollectionVisitor(NULL), + TheCXXRDDef(NULL) + { } + + ~ClassToStruct(void); + +private: + typedef llvm::SmallPtrSet<const clang::CXXRecordDecl *, 10> CXXRecordDeclSet; + typedef llvm::SetVector<const clang::CXXRecordDecl *> CXXRecordDeclSetVector; + + virtual void Initialize(clang::ASTContext &context); + + virtual void HandleTranslationUnit(clang::ASTContext &Ctx); + + void analyzeCXXRDSet(); + + void replaceClassWithStruct(); + + CXXRecordDeclSetVector CXXRDDefSet; + + ClassToStructVisitor *CollectionVisitor; + + const clang::CXXRecordDecl *TheCXXRDDef; + + // Unimplemented + ClassToStruct(void); + + ClassToStruct(const ClassToStruct &); + + void operator=(const ClassToStruct &); +}; + +#endif + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cvise-2.3.0+git.20210320.0ff4a84/clang_delta/tests/class-to-struct/class-to-struct1.C new/cvise-2.3.0+git.20210325.1a5f305/clang_delta/tests/class-to-struct/class-to-struct1.C --- old/cvise-2.3.0+git.20210320.0ff4a84/clang_delta/tests/class-to-struct/class-to-struct1.C 1970-01-01 01:00:00.000000000 +0100 +++ new/cvise-2.3.0+git.20210325.1a5f305/clang_delta/tests/class-to-struct/class-to-struct1.C 2021-03-25 13:22:45.000000000 +0100 @@ -0,0 +1,12 @@ +template <typename T> +class MyName +{ + public: + T a; +}; + +int main() +{ + MyName<int> a; + return a.a; +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cvise-2.3.0+git.20210320.0ff4a84/clang_delta/tests/class-to-struct/class-to-struct1.output new/cvise-2.3.0+git.20210325.1a5f305/clang_delta/tests/class-to-struct/class-to-struct1.output --- old/cvise-2.3.0+git.20210320.0ff4a84/clang_delta/tests/class-to-struct/class-to-struct1.output 1970-01-01 01:00:00.000000000 +0100 +++ new/cvise-2.3.0+git.20210325.1a5f305/clang_delta/tests/class-to-struct/class-to-struct1.output 2021-03-25 13:22:45.000000000 +0100 @@ -0,0 +1,12 @@ +template <typename T> +struct MyName +{ + public: + T a; +}; + +int main() +{ + MyName<int> a; + return a.a; +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cvise-2.3.0+git.20210320.0ff4a84/clang_delta/tests/test_clang_delta.py new/cvise-2.3.0+git.20210325.1a5f305/clang_delta/tests/test_clang_delta.py --- old/cvise-2.3.0+git.20210320.0ff4a84/clang_delta/tests/test_clang_delta.py 2021-03-20 20:44:38.000000000 +0100 +++ new/cvise-2.3.0+git.20210325.1a5f305/clang_delta/tests/test_clang_delta.py 2021-03-25 13:22:45.000000000 +0100 @@ -543,3 +543,6 @@ def test_simple_inliner_alias(self): self.check_clang_delta('simple-inliner/alias-crash.c', '--transformation=simple-inliner --counter=1') + + def test_class_to_struct(self): + self.check_clang_delta('class-to-struct/class-to-struct1.C', '--transformation=class-to-struct --counter=1') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cvise-2.3.0+git.20210320.0ff4a84/cvise/pass_groups/all.json new/cvise-2.3.0+git.20210325.1a5f305/cvise/pass_groups/all.json --- old/cvise-2.3.0+git.20210320.0ff4a84/cvise/pass_groups/all.json 2021-03-20 20:44:38.000000000 +0100 +++ new/cvise-2.3.0+git.20210325.1a5f305/cvise/pass_groups/all.json 2021-03-25 13:22:45.000000000 +0100 @@ -104,6 +104,7 @@ {"pass": "clang", "arg": "simplify-recursive-template-instantiation", "c": true }, {"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": "lines", "arg": "0"}, {"pass": "lines", "arg": "1"}, {"pass": "lines", "arg": "2"},