summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2014-01-02 19:42:02 +0000
committerDouglas Gregor <dgregor@apple.com>2014-01-02 19:42:02 +0000
commit6beabeed39924afcea4e0b23ff13f5c41910afe9 (patch)
treeb9cd83b292bdd7c24c57c69330ff640a057c07dd /clang/lib
parent8e6e6abf533930b976bd559b6263a1aa36740e79 (diff)
downloadbcm5719-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.cpp11
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);
}
OpenPOWER on IntegriCloud