diff options
| author | Douglas Gregor <dgregor@apple.com> | 2014-01-02 19:42:02 +0000 |
|---|---|---|
| committer | Douglas Gregor <dgregor@apple.com> | 2014-01-02 19:42:02 +0000 |
| commit | 6beabeed39924afcea4e0b23ff13f5c41910afe9 (patch) | |
| tree | b9cd83b292bdd7c24c57c69330ff640a057c07dd /clang/lib | |
| parent | 8e6e6abf533930b976bd559b6263a1aa36740e79 (diff) | |
| download | bcm5719-llvm-6beabeed39924afcea4e0b23ff13f5c41910afe9.tar.gz bcm5719-llvm-6beabeed39924afcea4e0b23ff13f5c41910afe9.zip | |
Objective-C ARC++: Prefer references to __strong/__weak over __unsafe_unretained.
Fixes <rdar://problem/15713945>.
llvm-svn: 198343
Diffstat (limited to 'clang/lib')
| -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); } |

