diff options
author | David Majnemer <david.majnemer@gmail.com> | 2015-09-11 20:18:09 +0000 |
---|---|---|
committer | David Majnemer <david.majnemer@gmail.com> | 2015-09-11 20:18:09 +0000 |
commit | 69c3ddc44a1b4b15cbfa1d447da0cc68eeb75579 (patch) | |
tree | d6ce0936766ba02929bc980fb3ddfe967c41bdbb /clang/lib/Sema/SemaTemplate.cpp | |
parent | 0123af994ec5f46bd705c11b17fc14a2fefc4726 (diff) | |
download | bcm5719-llvm-69c3ddc44a1b4b15cbfa1d447da0cc68eeb75579.tar.gz bcm5719-llvm-69c3ddc44a1b4b15cbfa1d447da0cc68eeb75579.zip |
[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.
llvm-svn: 247464
Diffstat (limited to 'clang/lib/Sema/SemaTemplate.cpp')
-rw-r--r-- | clang/lib/Sema/SemaTemplate.cpp | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/clang/lib/Sema/SemaTemplate.cpp b/clang/lib/Sema/SemaTemplate.cpp index b5b8b1ea8a9..d658f7b470e 100644 --- a/clang/lib/Sema/SemaTemplate.cpp +++ b/clang/lib/Sema/SemaTemplate.cpp @@ -4222,7 +4222,11 @@ isNullPointerValueTemplateArgument(Sema &S, NonTypeTemplateParmDecl *Param, 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); + if (!S.getLangOpts().CPlusPlus11) return NPV_NotNullPointer; @@ -4670,8 +4674,6 @@ static bool CheckTemplateArgumentPointerToMember(Sema &S, 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; |