diff options
Diffstat (limited to 'clang/lib/Sema/SemaTemplateDeduction.cpp')
| -rw-r--r-- | clang/lib/Sema/SemaTemplateDeduction.cpp | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaTemplateDeduction.cpp b/clang/lib/Sema/SemaTemplateDeduction.cpp index d87254483d0..71826d6799b 100644 --- a/clang/lib/Sema/SemaTemplateDeduction.cpp +++ b/clang/lib/Sema/SemaTemplateDeduction.cpp @@ -981,6 +981,17 @@ DeduceTemplateArgumentsByTypeMatch(Sema &S, Comparison.Qualifiers = ParamMoreQualified; else if (ArgQuals.isStrictSupersetOf(ParamQuals)) Comparison.Qualifiers = ArgMoreQualified; + else if (ArgQuals.getObjCLifetime() != ParamQuals.getObjCLifetime() && + ArgQuals.withoutObjCLifetime() + == ParamQuals.withoutObjCLifetime()) { + // Prefer binding to non-__unsafe_autoretained parameters. + if (ArgQuals.getObjCLifetime() == Qualifiers::OCL_ExplicitNone && + ParamQuals.getObjCLifetime()) + Comparison.Qualifiers = ParamMoreQualified; + else if (ParamQuals.getObjCLifetime() == Qualifiers::OCL_ExplicitNone && + ArgQuals.getObjCLifetime()) + Comparison.Qualifiers = ArgMoreQualified; + } RefParamComparisons->push_back(Comparison); } |

