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. > + > 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