forked from OSchip/llvm-project
objc: issue deprecated/unavailable diagnostic when
methods with these attributes are sent to receivers of 'id' type too. // rdar://10459930 llvm-svn: 145999
This commit is contained in:
parent
61e6d987bf
commit
6bdeb14d5d
|
@ -2276,6 +2276,9 @@ public:
|
|||
bool CanUseDecl(NamedDecl *D);
|
||||
bool DiagnoseUseOfDecl(NamedDecl *D, SourceLocation Loc,
|
||||
const ObjCInterfaceDecl *UnknownObjCClass=0);
|
||||
AvailabilityResult DiagnoseAvailabilityOfDecl(NamedDecl *D,
|
||||
SourceLocation Loc,
|
||||
const ObjCInterfaceDecl *UnknownObjCClass);
|
||||
std::string getDeletedOrUnavailableSuffix(const FunctionDecl *FD);
|
||||
bool DiagnosePropertyAccessorMismatch(ObjCPropertyDecl *PD,
|
||||
ObjCMethodDecl *Getter,
|
||||
|
|
|
@ -62,7 +62,8 @@ bool Sema::CanUseDecl(NamedDecl *D) {
|
|||
return true;
|
||||
}
|
||||
|
||||
static AvailabilityResult DiagnoseAvailabilityOfDecl(Sema &S,
|
||||
AvailabilityResult
|
||||
Sema::DiagnoseAvailabilityOfDecl(
|
||||
NamedDecl *D, SourceLocation Loc,
|
||||
const ObjCInterfaceDecl *UnknownObjCClass) {
|
||||
// See if this declaration is unavailable or deprecated.
|
||||
|
@ -81,22 +82,22 @@ static AvailabilityResult DiagnoseAvailabilityOfDecl(Sema &S,
|
|||
break;
|
||||
|
||||
case AR_Deprecated:
|
||||
S.EmitDeprecationWarning(D, Message, Loc, UnknownObjCClass);
|
||||
EmitDeprecationWarning(D, Message, Loc, UnknownObjCClass);
|
||||
break;
|
||||
|
||||
case AR_Unavailable:
|
||||
if (S.getCurContextAvailability() != AR_Unavailable) {
|
||||
if (getCurContextAvailability() != AR_Unavailable) {
|
||||
if (Message.empty()) {
|
||||
if (!UnknownObjCClass)
|
||||
S.Diag(Loc, diag::err_unavailable) << D->getDeclName();
|
||||
Diag(Loc, diag::err_unavailable) << D->getDeclName();
|
||||
else
|
||||
S.Diag(Loc, diag::warn_unavailable_fwdclass_message)
|
||||
Diag(Loc, diag::warn_unavailable_fwdclass_message)
|
||||
<< D->getDeclName();
|
||||
}
|
||||
else
|
||||
S.Diag(Loc, diag::err_unavailable_message)
|
||||
Diag(Loc, diag::err_unavailable_message)
|
||||
<< D->getDeclName() << Message;
|
||||
S.Diag(D->getLocation(), diag::note_unavailable_here)
|
||||
Diag(D->getLocation(), diag::note_unavailable_here)
|
||||
<< isa<FunctionDecl>(D) << false;
|
||||
}
|
||||
break;
|
||||
|
@ -151,7 +152,7 @@ bool Sema::DiagnoseUseOfDecl(NamedDecl *D, SourceLocation Loc,
|
|||
return true;
|
||||
}
|
||||
}
|
||||
DiagnoseAvailabilityOfDecl(*this, D, Loc, UnknownObjCClass);
|
||||
DiagnoseAvailabilityOfDecl(D, Loc, UnknownObjCClass);
|
||||
|
||||
// Warn if this is used but marked unused.
|
||||
if (D->hasAttr<UnusedAttr>())
|
||||
|
|
|
@ -1254,6 +1254,9 @@ ExprResult Sema::BuildInstanceMessage(Expr *Receiver,
|
|||
Method = LookupFactoryMethodInGlobalPool(Sel,
|
||||
SourceRange(LBracLoc, RBracLoc),
|
||||
receiverIsId);
|
||||
if (Method)
|
||||
DiagnoseAvailabilityOfDecl(Method, Loc, 0);
|
||||
|
||||
} else if (ReceiverType->isObjCClassType() ||
|
||||
ReceiverType->isObjCQualifiedClassType()) {
|
||||
// Handle messages to Class.
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
// RUN: %clang_cc1 -arcmt-check -verify -triple x86_64-apple-darwin10 %s
|
||||
// XFAIL: *
|
||||
|
||||
#include "Common.h"
|
||||
|
||||
|
|
|
@ -53,7 +53,7 @@ void t1(A *a)
|
|||
|
||||
void t2(id a)
|
||||
{
|
||||
[a f];
|
||||
[a f]; // expected-warning {{'f' is deprecated}}
|
||||
}
|
||||
|
||||
void t3(A<P>* a)
|
||||
|
@ -121,3 +121,20 @@ void test(Test2 *foo) {
|
|||
__attribute__((deprecated))
|
||||
@interface A(Blah) // expected-error{{attributes may not be specified on a category}}
|
||||
@end
|
||||
|
||||
// rdar://10459930
|
||||
|
||||
@class NSString;
|
||||
@interface NSDocumentController
|
||||
{
|
||||
id iv;
|
||||
}
|
||||
- (void)fileExtensionsFromType:(NSString *)typeName __attribute__((deprecated));
|
||||
@end
|
||||
|
||||
@implementation NSDocumentController
|
||||
- (void) Meth {
|
||||
[iv fileExtensionsFromType:@"public.text"]; // expected-warning {{'fileExtensionsFromType:' is deprecated}}
|
||||
}
|
||||
- (void)fileExtensionsFromType:(NSString *)typeName {}
|
||||
@end
|
||||
|
|
Loading…
Reference in New Issue