<div dir="ltr">Should be fixed in r200940.<br></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, Feb 6, 2014 at 9:56 AM, jahanian <span dir="ltr"><<a href="mailto:fjahanian@apple.com" target="_blank">fjahanian@apple.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><br><div><div class="im"><div>On Feb 5, 2014, at 10:59 AM, Reid Kleckner <<a href="mailto:reid@kleckner.net" target="_blank">reid@kleckner.net</a>> wrote:</div>
<br><blockquote type="cite">Author: rnk<br>Date: Wed Feb  5 12:59:38 2014<br>New Revision: 200869<br><br>URL: <a href="http://llvm.org/viewvc/llvm-project?rev=200869&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=200869&view=rev</a><br>
Log:<br>MS ABI: Fix mangling of static methods and function references<br><br>Function references always use $1? like function pointers and never $E?<br>like var decl references.  Static methods are mangled like function<br>
pointers.<br><br>Modified:<br>    cfe/trunk/lib/AST/MicrosoftMangle.cpp<br>    cfe/trunk/test/CodeGenCXX/mangle-ms-template-callback.cpp<br></blockquote><div><br></div></div>This test has been failing on Apple’s public buildbots, with this diagnostic:</div>
<div><br></div><div><pre style="font-family:'Courier New',courier,monotype;font-size:medium"><span>FAIL: Clang :: CodeGenCXX/mangle-ms-templates-memptrs.cpp (2143 of 16710)
******************** TEST 'Clang :: CodeGenCXX/mangle-ms-templates-memptrs.cpp' FAILED ********************
Script:
--
/Users/buildslave/zorg/buildbot/smooshlab/slave-0.8/build.clang-x86_64-darwin11-nobootstrap-RAincremental/clang-build/Release+Asserts/bin/clang -cc1 -internal-isystem /Users/buildslave/zorg/buildbot/smooshlab/slave-0.8/build.clang-x86_64-darwin11-nobootstrap-RAincremental/clang-build/Release+Asserts/bin/../lib/clang/3.5/include -Wno-microsoft -fno-rtti -std=c++11 -emit-llvm /Users/buildslave/zorg/buildbot/smooshlab/slave-0.8/build.clang-x86_64-darwin11-nobootstrap-RAincremental/clang.src/test/CodeGenCXX/mangle-ms-templates-memptrs.cpp -o - -triple=i386-pc-win32 | FileCheck /Users/buildslave/zorg/buildbot/smooshlab/slave-0.8/build.clang-x86_64-darwin11-nobootstrap-RAincremental/clang.src/test/CodeGenCXX/mangle-ms-templates-memptrs.cpp
--
Exit Code: 2

Command Output (stderr):
--
/Users/buildslave/zorg/buildbot/smooshlab/slave-0.8/build.clang-x86_64-darwin11-nobootstrap-RAincremental/clang.src/test/CodeGenCXX/mangle-ms-templates-memptrs.cpp:31:3: error: no matching function for call to 'ReadField'
  ReadField<I, &S::a>(s);
  ^~~~~~~~~~~~~~~~~~~
/Users/buildslave/zorg/buildbot/smooshlab/slave-0.8/build.clang-x86_64-darwin11-nobootstrap-RAincremental/clang.src/test/CodeGenCXX/mangle-ms-templates-memptrs.cpp:21:5: note: candidate template ignored: invalid explicitly-specified argument for template parameter 'F'
int ReadField(T &o) {
    ^
/Users/buildslave/zorg/buildbot/smooshlab/slave-0.8/build.clang-x86_64-darwin11-nobootstrap-RAincremental/clang.src/test/CodeGenCXX/mangle-ms-templates-memptrs.cpp:36:3: error: no matching function for call to 'ReadField'
  ReadField<I, &S::b>(s);
  ^~~~~~~~~~~~~~~~~~~
/Users/buildslave/zorg/buildbot/smooshlab/slave-0.8/build.clang-x86_64-darwin11-nobootstrap-RAincremental/clang.src/test/CodeGenCXX/mangle-ms-templates-memptrs.cpp:21:5: note: candidate template ignored: invalid explicitly-specified argument for template parameter 'F'
int ReadField(T &o) {
    ^
2 errors generated.
FileCheck error: '-' is empty.</span></pre><div><br></div><div>Please take a look.</div><div><br></div><div>Thanks, Fariborz</div><div><div class="h5"><div><br></div><blockquote type="cite"><br>Modified: cfe/trunk/lib/AST/MicrosoftMangle.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/MicrosoftMangle.cpp?rev=200869&r1=200868&r2=200869&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/MicrosoftMangle.cpp?rev=200869&r1=200868&r2=200869&view=diff</a><br>
==============================================================================<br>--- cfe/trunk/lib/AST/MicrosoftMangle.cpp (original)<br>+++ cfe/trunk/lib/AST/MicrosoftMangle.cpp Wed Feb  5 12:59:38 2014<br>@@ -1090,12 +1090,17 @@ void MicrosoftCXXNameMangler::mangleTemp<br>
   }<br>   case TemplateArgument::Declaration: {<br>     const NamedDecl *ND = cast<NamedDecl>(TA.getAsDecl());<br>-    if (const FieldDecl *FD = dyn_cast<FieldDecl>(ND))<br>+    if (const FieldDecl *FD = dyn_cast<FieldDecl>(ND)) {<br>
       mangleMemberDataPointer(cast<CXXRecordDecl>(FD->getParent()), FD);<br>-    else if (const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(ND))<br>-      mangleMemberFunctionPointer(MD->getParent(), MD);<br>
-    else<br>+    } else if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(ND)) {<br>+      const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(ND);<br>+      if (MD && MD->isInstance())<br>+        mangleMemberFunctionPointer(MD->getParent(), MD);<br>
+      else<br>+        mangle(ND, "$1?");<br>+    } else {<br>       mangle(ND, TA.isDeclForReferenceParam() ? "$E?" : "$1?");<br>+    }<br>     break;<br>   }<br>   case TemplateArgument::Integral:<br>
<br>Modified: cfe/trunk/test/CodeGenCXX/mangle-ms-template-callback.cpp<br>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/mangle-ms-template-callback.cpp?rev=200869&r1=200868&r2=200869&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/mangle-ms-template-callback.cpp?rev=200869&r1=200868&r2=200869&view=diff</a><br>
==============================================================================<br>--- cfe/trunk/test/CodeGenCXX/mangle-ms-template-callback.cpp (original)<br>+++ cfe/trunk/test/CodeGenCXX/mangle-ms-template-callback.cpp Wed Feb  5 12:59:38 2014<br>
@@ -70,3 +70,20 @@ void call_bar() {<br> // CHECK: "\01??$bar@P_EAHH@Z@@YAXP_EAHH@Z@Z"<br> // FYI blocks are not present in MSVS, so we're free to choose the spec.<br> }<br>+<br>+template <void (*Fn)()> void WrapFnPtr() { Fn(); }<br>
+template <void (&Fn)()> void WrapFnRef() { Fn(); }<br>+struct Thing {<br>+  static void VoidStaticMethod();<br>+};<br>+void VoidFn();<br>+void CallWrapper() {<br>+  WrapFnPtr<VoidFn>();<br>+  WrapFnRef<VoidFn>();<br>
+  WrapFnPtr<Thing::VoidStaticMethod>();<br>+  WrapFnRef<Thing::VoidStaticMethod>();<br>+}<br>+// CHECK: call {{.*}} @"\01??$WrapFnPtr@$1?VoidFn@@YAXXZ@@YAXXZ"<br>+// CHECK: call {{.*}} @"\01??$WrapFnRef@$1?VoidFn@@YAXXZ@@YAXXZ"<br>
+// CHECK: call {{.*}} @"\01??$WrapFnPtr@$1?VoidStaticMethod@Thing@@SAXXZ@@YAXXZ"<br>+// CHECK: call {{.*}} @"\01??$WrapFnRef@$1?VoidStaticMethod@Thing@@SAXXZ@@YAXXZ"<br><br><br>_______________________________________________<br>
cfe-commits mailing list<br><a href="mailto:cfe-commits@cs.uiuc.edu" target="_blank">cfe-commits@cs.uiuc.edu</a><br><a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
</blockquote></div></div></div><br></div><br>_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
<br></blockquote></div><br></div>