r247464 - [MS ABI] Select an inheritance model in template arguments
David Majnemer via cfe-commits
cfe-commits at lists.llvm.org
Fri Sep 11 13:57:15 PDT 2015
On Fri, Sep 11, 2015 at 1:23 PM, Richard Smith <richard at metafoo.co.uk>
wrote:
> On Fri, Sep 11, 2015 at 1:18 PM, David Majnemer via cfe-commits <
> cfe-commits at 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 at ReferenceToMPTWithIncompleteClass@@YAHAAPQK at 1
>> @H at 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 at VA@PMFInTemplateArgument@@$1?printd at 12
>> @AAEHH at Z@PMFInTemplateArgument@@YAXXZ"(
>> +}
>>
>>
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20150911/8da6a7fe/attachment.html>
More information about the cfe-commits
mailing list