<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Fri, Sep 11, 2015 at 12:46 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:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Reduced it a bit:<div><div>template <class C, int (C::*M)(int)></div><div>void JSMethod();</div><div>class A {</div><div>  int printd(int);</div><div>  void printd();</div><div>};</div><div>void A::printd() { JSMethod<A, &A::printd>(); }</div></div><div><br></div><div>This test case will crash clang at the revision before this commit which means that something more mysterious/horrific is going on...</div></div></blockquote><div><br>Are we perhaps failing to RequireCompleteType on M's type after substituting the value of C into it?</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><div class="gmail_quote">On Fri, Sep 11, 2015 at 11:10 AM, David Majnemer <span dir="ltr"><<a href="mailto:david.majnemer@gmail.com" target="_blank">david.majnemer@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Taking a look, would appreciate it if we didn't revert this until I give it a fair shot.  Shouldn't take too long.</div><div><div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Sep 11, 2015 at 10:58 AM, Hans Wennborg <span dir="ltr"><<a href="mailto:hans@chromium.org" target="_blank">hans@chromium.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">This made the Chromium build sad. For example:<br>
<a href="http://build.chromium.org/p/chromium.fyi/builders/ClangToTWin/builds/3092/steps/compile/logs/stdio" rel="noreferrer" target="_blank">http://build.chromium.org/p/chromium.fyi/builders/ClangToTWin/builds/3092/steps/compile/logs/stdio</a><br>
<br>
Reduction:<br>
<br>
$ clang -cc1 -triple i686-pc-windows-msvc18.0.0 -w -fms-extensions<br>
-fms-compatibility -fms-compatibility-version=18.0 -std=c++11<br>
-fdelayed-template-parsing a.ii<br>
<br>
template <class C, int (C::*M)(int *, const int &, int &, int &)><br>
void JSMethod(char *, char *, int);<br>
class A {<br>
  int printd(int *, const int &, int &, int &);<br>
  int printd_info;<br>
  void printd() { JSMethod<A, &A::printd>("", "", printd_info); }<br>
};<br>
<div><div><br>
<br>
On Thu, Sep 10, 2015 at 2:52 PM, David Majnemer via cfe-commits<br>
<<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a>> wrote:<br>
> Author: majnemer<br>
> Date: Thu Sep 10 16:52:00 2015<br>
> New Revision: 247346<br>
><br>
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=247346&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=247346&view=rev</a><br>
> Log:<br>
> [MS ABI] Make member pointers return true for isIncompleteType<br>
><br>
> The type of a member pointer is incomplete if it has no inheritance<br>
> model.  This lets us reuse more general logic already embedded in clang.<br>
</div></div></blockquote></div><br></div>
</div></div></blockquote></div><br></div>
</div></div><br>_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@lists.llvm.org">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>
<br></blockquote></div><br></div></div>