[llvm] r277582 - [PM] Add the explicit copy, move, swap, and assignment boilerplate
Chandler Carruth via llvm-commits
llvm-commits at lists.llvm.org
Wed Aug 3 01:16:09 PDT 2016
Author: chandlerc
Date: Wed Aug 3 03:16:08 2016
New Revision: 277582
URL: http://llvm.org/viewvc/llvm-project?rev=277582&view=rev
Log:
[PM] Add the explicit copy, move, swap, and assignment boilerplate
required by MSVC 2013.
This also makes the repeating pass wrapper assignable. Mildly
unfortunate as it means we can't use a const member for the int, but
that is a really minor invariant to try to preserve at the cost of loss
of regularity of the type. Yet another annoyance of the particular C++
object / move semantic model.
Modified:
llvm/trunk/include/llvm/IR/PassManager.h
Modified: llvm/trunk/include/llvm/IR/PassManager.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/PassManager.h?rev=277582&r1=277581&r2=277582&view=diff
==============================================================================
--- llvm/trunk/include/llvm/IR/PassManager.h (original)
+++ llvm/trunk/include/llvm/IR/PassManager.h Wed Aug 3 03:16:08 2016
@@ -995,6 +995,21 @@ template <typename PassT>
class RepeatingPassWrapper : public PassInfoMixin<RepeatingPassWrapper<PassT>> {
public:
RepeatingPassWrapper(int Count, PassT P) : Count(Count), P(std::move(P)) {}
+ // We have to explicitly define all the special member functions because MSVC
+ // refuses to generate them.
+ RepeatingPassWrapper(const RepeatingPassWrapper &Arg)
+ : Count(Arg.Count), P(Arg.P) {}
+ RepeatingPassWrapper(RepeatingPassWrapper &&Arg)
+ : Count(Arg.Count), P(std::move(Arg.P)) {}
+ friend void swap(RepeatingPassWrapper &LHS, RepeatingPassWrapper &RHS) {
+ using std::swap;
+ swap(LHS.Count, RHS.Count);
+ swap(LHS.P, RHS.P);
+ }
+ RepeatingPassWrapper &operator=(RepeatingPassWrapper RHS) {
+ swap(*this, RHS);
+ return *this;
+ }
template <typename IRUnitT, typename... Ts>
PreservedAnalyses run(IRUnitT &Arg, AnalysisManager<IRUnitT> &AM,
@@ -1006,7 +1021,7 @@ public:
}
private:
- const int Count;
+ int Count;
PassT P;
};
More information about the llvm-commits
mailing list