<div dir="ltr"><div class="gmail_quote"><div dir="ltr">On Wed, Aug 3, 2016 at 7:53 AM Robinson, Paul via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
<br>
> -----Original Message-----<br>
> From: llvm-commits [mailto:<a href="mailto:llvm-commits-bounces@lists.llvm.org" target="_blank">llvm-commits-bounces@lists.llvm.org</a>] On Behalf<br>
> Of Chandler Carruth via llvm-commits<br>
> Sent: Wednesday, August 03, 2016 1:16 AM<br>
> To: <a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
> Subject: [llvm] r277582 - [PM] Add the explicit copy, move, swap, and<br>
> assignment boilerplate<br>
><br>
> Author: chandlerc<br>
> Date: Wed Aug  3 03:16:08 2016<br>
> New Revision: 277582<br>
><br>
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=277582&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=277582&view=rev</a><br>
> Log:<br>
> [PM] Add the explicit copy, move, swap, and assignment boilerplate<br>
> required by MSVC 2013.<br>
><br>
> This also makes the repeating pass wrapper assignable. Mildly<br>
> unfortunate as it means we can't use a const member for the int, but<br>
> that is a really minor invariant to try to preserve at the cost of loss<br>
> of regularity of the type. Yet another annoyance of the particular C++<br>
> object / move semantic model.<br>
><br>
> Modified:<br>
>     llvm/trunk/include/llvm/IR/PassManager.h<br>
><br>
> Modified: llvm/trunk/include/llvm/IR/PassManager.h<br>
> URL: <a href="http://llvm.org/viewvc/llvm-" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-</a><br>
> project/llvm/trunk/include/llvm/IR/PassManager.h?rev=277582&r1=277581&r2=2<br>
> 77582&view=diff<br>
> ==========================================================================<br>
> ====<br>
> --- llvm/trunk/include/llvm/IR/PassManager.h (original)<br>
> +++ llvm/trunk/include/llvm/IR/PassManager.h Wed Aug  3 03:16:08 2016<br>
> @@ -995,6 +995,21 @@ template <typename PassT><br>
>  class RepeatingPassWrapper : public<br>
> PassInfoMixin<RepeatingPassWrapper<PassT>> {<br>
>  public:<br>
>    RepeatingPassWrapper(int Count, PassT P) : Count(Count),<br>
> P(std::move(P)) {}<br>
> +  // We have to explicitly define all the special member functions<br>
> because MSVC<br>
> +  // refuses to generate them.<br>
<br>
Aaron Ballman says this kind of thing should have a FIXME citing<br>
MSVC 2013 specifically, because we can remove it after we upgrade<br>
the minimum to 2015.  (Just spreading the word here.)<br></blockquote><div><br></div><div>I'm aware, I just copied the boiler plate from elsewhere in the file. I can try to start actually saying "FIXME" in the future. I certainly plan to do a great GC-ing of these issues when we get to that point.</div><div><br></div><div>-Chandler</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Thanks,<br>
--paulr<br>
<br>
> +  RepeatingPassWrapper(const RepeatingPassWrapper &Arg)<br>
> +      : Count(Arg.Count), P(Arg.P) {}<br>
> +  RepeatingPassWrapper(RepeatingPassWrapper &&Arg)<br>
> +      : Count(Arg.Count), P(std::move(Arg.P)) {}<br>
> +  friend void swap(RepeatingPassWrapper &LHS, RepeatingPassWrapper &RHS)<br>
> {<br>
> +    using std::swap;<br>
> +    swap(LHS.Count, RHS.Count);<br>
> +    swap(LHS.P, RHS.P);<br>
> +  }<br>
> +  RepeatingPassWrapper &operator=(RepeatingPassWrapper RHS) {<br>
> +    swap(*this, RHS);<br>
> +    return *this;<br>
> +  }<br>
><br>
>    template <typename IRUnitT, typename... Ts><br>
>    PreservedAnalyses run(IRUnitT &Arg, AnalysisManager<IRUnitT> &AM,<br>
> @@ -1006,7 +1021,7 @@ public:<br>
>    }<br>
><br>
>  private:<br>
> -  const int Count;<br>
> +  int Count;<br>
>    PassT P;<br>
>  };<br>
><br>
><br>
><br>
> _______________________________________________<br>
> llvm-commits mailing list<br>
> <a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
> <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div></div>