Should be fixed in r200940.
On Thu, Feb 6, 2014 at 9:56 AM, jahanian <[email protected]> wrote: > > On Feb 5, 2014, at 10:59 AM, Reid Kleckner <[email protected]> wrote: > > Author: rnk > Date: Wed Feb 5 12:59:38 2014 > New Revision: 200869 > > URL: http://llvm.org/viewvc/llvm-project?rev=200869&view=rev > Log: > MS ABI: Fix mangling of static methods and function references > > Function references always use $1? like function pointers and never $E? > like var decl references. Static methods are mangled like function > pointers. > > Modified: > cfe/trunk/lib/AST/MicrosoftMangle.cpp > cfe/trunk/test/CodeGenCXX/mangle-ms-template-callback.cpp > > > This test has been failing on Apple's public buildbots, with this > diagnostic: > > 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. > > > Please take a look. > > Thanks, Fariborz > > > Modified: cfe/trunk/lib/AST/MicrosoftMangle.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/MicrosoftMangle.cpp?rev=200869&r1=200868&r2=200869&view=diff > > ============================================================================== > --- cfe/trunk/lib/AST/MicrosoftMangle.cpp (original) > +++ cfe/trunk/lib/AST/MicrosoftMangle.cpp Wed Feb 5 12:59:38 2014 > @@ -1090,12 +1090,17 @@ void MicrosoftCXXNameMangler::mangleTemp > } > case TemplateArgument::Declaration: { > const NamedDecl *ND = cast<NamedDecl>(TA.getAsDecl()); > - if (const FieldDecl *FD = dyn_cast<FieldDecl>(ND)) > + if (const FieldDecl *FD = dyn_cast<FieldDecl>(ND)) { > mangleMemberDataPointer(cast<CXXRecordDecl>(FD->getParent()), FD); > - else if (const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(ND)) > - mangleMemberFunctionPointer(MD->getParent(), MD); > - else > + } else if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(ND)) { > + const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(ND); > + if (MD && MD->isInstance()) > + mangleMemberFunctionPointer(MD->getParent(), MD); > + else > + mangle(ND, "$1?"); > + } else { > mangle(ND, TA.isDeclForReferenceParam() ? "$E?" : "$1?"); > + } > break; > } > case TemplateArgument::Integral: > > Modified: cfe/trunk/test/CodeGenCXX/mangle-ms-template-callback.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/mangle-ms-template-callback.cpp?rev=200869&r1=200868&r2=200869&view=diff > > ============================================================================== > --- cfe/trunk/test/CodeGenCXX/mangle-ms-template-callback.cpp (original) > +++ cfe/trunk/test/CodeGenCXX/mangle-ms-template-callback.cpp Wed Feb 5 > 12:59:38 2014 > @@ -70,3 +70,20 @@ void call_bar() { > // CHECK: "\01??$bar@P_EAHH@Z@@YAXP_EAHH@Z@Z" > // FYI blocks are not present in MSVS, so we're free to choose the spec. > } > + > +template <void (*Fn)()> void WrapFnPtr() { Fn(); } > +template <void (&Fn)()> void WrapFnRef() { Fn(); } > +struct Thing { > + static void VoidStaticMethod(); > +}; > +void VoidFn(); > +void CallWrapper() { > + WrapFnPtr<VoidFn>(); > + WrapFnRef<VoidFn>(); > + WrapFnPtr<Thing::VoidStaticMethod>(); > + WrapFnRef<Thing::VoidStaticMethod>(); > +} > +// CHECK: call {{.*}} @"\01??$WrapFnPtr@$1?VoidFn@@YAXXZ@@YAXXZ" > +// CHECK: call {{.*}} @"\01??$WrapFnRef@$1?VoidFn@@YAXXZ@@YAXXZ" > +// CHECK: call {{.*}} @"\01??$WrapFnPtr@$1?VoidStaticMethod@Thing@@SAXXZ@ > @YAXXZ" > +// CHECK: call {{.*}} @"\01??$WrapFnRef@$1?VoidStaticMethod@Thing@@SAXXZ@ > @YAXXZ" > > > _______________________________________________ > cfe-commits mailing list > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits > > > > _______________________________________________ > cfe-commits mailing list > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits > >
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
