<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Sep 11, 2015 at 1:23 PM, Richard Smith <span dir="ltr"><<a href="mailto:richard@metafoo.co.uk" target="_blank">richard@metafoo.co.uk</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div><div class="h5">On Fri, Sep 11, 2015 at 1:18 PM, David Majnemer via cfe-commits <span dir="ltr"><<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">Author: majnemer<br>
Date: Fri Sep 11 15:18:09 2015<br>
New Revision: 247464<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=247464&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=247464&view=rev</a><br>
Log:<br>
[MS ABI] Select an inheritance model in template arguments<br>
<br>
We used to only select an inheritance model if the pointer to member was<br>
nullptr.  Instead, select a model regardless of the member pointer's<br>
value.<br>
<br>
N.B.  This bug was exposed by making member pointers report true for<br>
isIncompleteType but has been latent since the member pointer scheme's<br>
inception.<br>
<br>
Modified:<br>
    cfe/trunk/lib/Sema/SemaTemplate.cpp<br>
    cfe/trunk/test/CodeGenCXX/microsoft-abi-member-pointers.cpp<br>
<br>
Modified: cfe/trunk/lib/Sema/SemaTemplate.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaTemplate.cpp?rev=247464&r1=247463&r2=247464&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaTemplate.cpp?rev=247464&r1=247463&r2=247464&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/Sema/SemaTemplate.cpp (original)<br>
+++ cfe/trunk/lib/Sema/SemaTemplate.cpp Fri Sep 11 15:18:09 2015<br>
@@ -4222,7 +4222,11 @@ isNullPointerValueTemplateArgument(Sema<br>
                                    QualType ParamType, Expr *Arg) {<br>
   if (Arg->isValueDependent() || Arg->isTypeDependent())<br>
     return NPV_NotNullPointer;<br>
-<br>
+<br>
+  if (ParamType->isMemberPointerType())<br>
+    if (S.Context.getTargetInfo().getCXXABI().isMicrosoft())<br>
+      S.RequireCompleteType(Arg->getExprLoc(), ParamType, 0);<br></blockquote><div><br></div></div></div><div>It seems simpler to unconditionally require the type to be complete.</div></div></div></div></blockquote><div><br></div><div>Done in r247472.</div>







<div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div><div class="h5"><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
+<br>
   if (!S.getLangOpts().CPlusPlus11)<br>
     return NPV_NotNullPointer;<br>
<br>
@@ -4670,8 +4674,6 @@ static bool CheckTemplateArgumentPointer<br>
     S.Diag(Arg->getExprLoc(), diag::warn_cxx98_compat_template_arg_null);<br>
     Converted = TemplateArgument(S.Context.getCanonicalType(ParamType),<br>
                                  /*isNullPtr*/true);<br>
-    if (S.Context.getTargetInfo().getCXXABI().isMicrosoft())<br>
-      S.RequireCompleteType(Arg->getExprLoc(), ParamType, 0);<br>
     return false;<br>
   case NPV_NotNullPointer:<br>
     break;<br>
<br>
Modified: cfe/trunk/test/CodeGenCXX/microsoft-abi-member-pointers.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/microsoft-abi-member-pointers.cpp?rev=247464&r1=247463&r2=247464&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/microsoft-abi-member-pointers.cpp?rev=247464&r1=247463&r2=247464&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/test/CodeGenCXX/microsoft-abi-member-pointers.cpp (original)<br>
+++ cfe/trunk/test/CodeGenCXX/microsoft-abi-member-pointers.cpp Fri Sep 11 15:18:09 2015<br>
@@ -768,3 +768,14 @@ bool g(int J::*&p, int J::*&q) { return<br>
 // CHECK-LABEL: @"\01?h@ReferenceToMPTWithIncompleteClass@@YAHAAPQK@1@H@Z"(<br>
 int h(int K::*&p) { return k->*p; }<br>
 }<br>
+<br>
+namespace PMFInTemplateArgument {<br>
+template <class C, int (C::*M)(int)><br>
+void JSMethod();<br>
+class A {<br>
+  int printd(int);<br>
+  void printd();<br>
+};<br>
+void A::printd() { JSMethod<A, &A::printd>(); }<br>
+// CHECK-LABEL: @"\01??$JSMethod@VA@PMFInTemplateArgument@@$1?printd@12@AAEHH@Z@PMFInTemplateArgument@@YAXXZ"(<br>
+}<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits</a><br>
</blockquote></div></div></div><br></div></div>
</blockquote></div><br></div></div>