aboutsummaryrefslogtreecommitdiff
path: root/lib/Sema/TreeTransform.h
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Sema/TreeTransform.h')
-rw-r--r--lib/Sema/TreeTransform.h11
1 files changed, 7 insertions, 4 deletions
diff --git a/lib/Sema/TreeTransform.h b/lib/Sema/TreeTransform.h
index d33e7a5c4c..121ff00628 100644
--- a/lib/Sema/TreeTransform.h
+++ b/lib/Sema/TreeTransform.h
@@ -3177,8 +3177,7 @@ TreeTransform<Derived>::TransformQualifiedType(TypeLocBuilder &TLB,
if (Quals.hasObjCLifetime()) {
if (!Result->isObjCLifetimeType() && !Result->isDependentType())
Quals.removeObjCLifetime();
- else if (Result.getObjCLifetime() &&
- Result.getObjCLifetime() != Quals.getObjCLifetime()) {
+ else if (Result.getObjCLifetime()) {
// Objective-C ARC:
// A lifetime qualifier applied to a substituted template parameter
// overrides the lifetime qualifier from the template argument.
@@ -3195,8 +3194,12 @@ TreeTransform<Derived>::TransformQualifiedType(TypeLocBuilder &TLB,
Replacement);
TLB.TypeWasModifiedSafely(Result);
} else {
- // Otherwise, drop the new qualifier.
- // FIXME: I don't recall the justification for this!
+ // Otherwise, complain about the addition of a qualifier to an
+ // already-qualified type.
+ SourceRange R = TLB.getTemporaryTypeLoc(Result).getSourceRange();
+ SemaRef.Diag(R.getBegin(), diag::err_attr_objc_lifetime_redundant)
+ << Result << R;
+
Quals.removeObjCLifetime();
}
}