On Fri, Sep 11, 2015 at 1:23 PM, Richard Smith <rich...@metafoo.co.uk> wrote:
> On Fri, Sep 11, 2015 at 1:18 PM, David Majnemer via cfe-commits < > cfe-commits@lists.llvm.org> wrote: > >> Author: majnemer >> Date: Fri Sep 11 15:18:09 2015 >> New Revision: 247464 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=247464&view=rev >> Log: >> [MS ABI] Select an inheritance model in template arguments >> >> We used to only select an inheritance model if the pointer to member was >> nullptr. Instead, select a model regardless of the member pointer's >> value. >> >> N.B. This bug was exposed by making member pointers report true for >> isIncompleteType but has been latent since the member pointer scheme's >> inception. >> >> Modified: >> cfe/trunk/lib/Sema/SemaTemplate.cpp >> cfe/trunk/test/CodeGenCXX/microsoft-abi-member-pointers.cpp >> >> Modified: cfe/trunk/lib/Sema/SemaTemplate.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaTemplate.cpp?rev=247464&r1=247463&r2=247464&view=diff >> >> ============================================================================== >> --- cfe/trunk/lib/Sema/SemaTemplate.cpp (original) >> +++ cfe/trunk/lib/Sema/SemaTemplate.cpp Fri Sep 11 15:18:09 2015 >> @@ -4222,7 +4222,11 @@ isNullPointerValueTemplateArgument(Sema >> QualType ParamType, Expr *Arg) { >> if (Arg->isValueDependent() || Arg->isTypeDependent()) >> return NPV_NotNullPointer; >> - >> + >> + if (ParamType->isMemberPointerType()) >> + if (S.Context.getTargetInfo().getCXXABI().isMicrosoft()) >> + S.RequireCompleteType(Arg->getExprLoc(), ParamType, 0); >> > > It seems simpler to unconditionally require the type to be complete. > Done in r247472. > > >> + >> if (!S.getLangOpts().CPlusPlus11) >> return NPV_NotNullPointer; >> >> @@ -4670,8 +4674,6 @@ static bool CheckTemplateArgumentPointer >> S.Diag(Arg->getExprLoc(), diag::warn_cxx98_compat_template_arg_null); >> Converted = TemplateArgument(S.Context.getCanonicalType(ParamType), >> /*isNullPtr*/true); >> - if (S.Context.getTargetInfo().getCXXABI().isMicrosoft()) >> - S.RequireCompleteType(Arg->getExprLoc(), ParamType, 0); >> return false; >> case NPV_NotNullPointer: >> break; >> >> Modified: cfe/trunk/test/CodeGenCXX/microsoft-abi-member-pointers.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/microsoft-abi-member-pointers.cpp?rev=247464&r1=247463&r2=247464&view=diff >> >> ============================================================================== >> --- cfe/trunk/test/CodeGenCXX/microsoft-abi-member-pointers.cpp (original) >> +++ cfe/trunk/test/CodeGenCXX/microsoft-abi-member-pointers.cpp Fri Sep >> 11 15:18:09 2015 >> @@ -768,3 +768,14 @@ bool g(int J::*&p, int J::*&q) { return >> // CHECK-LABEL: @"\01?h@ReferenceToMPTWithIncompleteClass@@YAHAAPQK@1 >> @H@Z"( >> int h(int K::*&p) { return k->*p; } >> } >> + >> +namespace PMFInTemplateArgument { >> +template <class C, int (C::*M)(int)> >> +void JSMethod(); >> +class A { >> + int printd(int); >> + void printd(); >> +}; >> +void A::printd() { JSMethod<A, &A::printd>(); } >> +// CHECK-LABEL: @"\01??$JSMethod@VA@PMFInTemplateArgument@@$1?printd@12 >> @AAEHH@Z@PMFInTemplateArgument@@YAXXZ"( >> +} >> >> >> _______________________________________________ >> cfe-commits mailing list >> cfe-commits@lists.llvm.org >> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits >> > >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits