mirror of
https://github.com/RPCS3/llvm.git
synced 2025-01-29 22:52:18 +00:00
[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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@277582 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
91b6bfa061
commit
9d383c5b84
@ -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…
x
Reference in New Issue
Block a user