forked from OSchip/llvm-project
[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. llvm-svn: 277582
This commit is contained in:
parent
241bf2456f
commit
1af98245f4
|
@ -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;
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue