зеркало из https://github.com/microsoft/clang-1.git
Revert r145999. This turned out to be a bad idea. Unfortunately, 'id' is used so profusely
in many APIs and large codebases that this made the deprecated warning trigger happy to the point of not being useful. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150223 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
572ae0a32e
Коммит
d6cf912e1e
|
@ -2251,9 +2251,6 @@ 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,
|
||||
|
|
|
@ -65,8 +65,7 @@ bool Sema::CanUseDecl(NamedDecl *D) {
|
|||
return true;
|
||||
}
|
||||
|
||||
AvailabilityResult
|
||||
Sema::DiagnoseAvailabilityOfDecl(
|
||||
static AvailabilityResult DiagnoseAvailabilityOfDecl(Sema &S,
|
||||
NamedDecl *D, SourceLocation Loc,
|
||||
const ObjCInterfaceDecl *UnknownObjCClass) {
|
||||
// See if this declaration is unavailable or deprecated.
|
||||
|
@ -85,22 +84,22 @@ Sema::DiagnoseAvailabilityOfDecl(
|
|||
break;
|
||||
|
||||
case AR_Deprecated:
|
||||
EmitDeprecationWarning(D, Message, Loc, UnknownObjCClass);
|
||||
S.EmitDeprecationWarning(D, Message, Loc, UnknownObjCClass);
|
||||
break;
|
||||
|
||||
case AR_Unavailable:
|
||||
if (getCurContextAvailability() != AR_Unavailable) {
|
||||
if (S.getCurContextAvailability() != AR_Unavailable) {
|
||||
if (Message.empty()) {
|
||||
if (!UnknownObjCClass)
|
||||
Diag(Loc, diag::err_unavailable) << D->getDeclName();
|
||||
S.Diag(Loc, diag::err_unavailable) << D->getDeclName();
|
||||
else
|
||||
Diag(Loc, diag::warn_unavailable_fwdclass_message)
|
||||
S.Diag(Loc, diag::warn_unavailable_fwdclass_message)
|
||||
<< D->getDeclName();
|
||||
}
|
||||
else
|
||||
Diag(Loc, diag::err_unavailable_message)
|
||||
S.Diag(Loc, diag::err_unavailable_message)
|
||||
<< D->getDeclName() << Message;
|
||||
Diag(D->getLocation(), diag::note_unavailable_here)
|
||||
S.Diag(D->getLocation(), diag::note_unavailable_here)
|
||||
<< isa<FunctionDecl>(D) << false;
|
||||
}
|
||||
break;
|
||||
|
@ -155,7 +154,7 @@ bool Sema::DiagnoseUseOfDecl(NamedDecl *D, SourceLocation Loc,
|
|||
return true;
|
||||
}
|
||||
}
|
||||
DiagnoseAvailabilityOfDecl(D, Loc, UnknownObjCClass);
|
||||
DiagnoseAvailabilityOfDecl(*this, D, Loc, UnknownObjCClass);
|
||||
|
||||
// Warn if this is used but marked unused.
|
||||
if (D->hasAttr<UnusedAttr>())
|
||||
|
|
|
@ -1279,9 +1279,6 @@ 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.
|
||||
|
|
|
@ -15,9 +15,9 @@ typedef int BOOL;
|
|||
typedef unsigned NSUInteger;
|
||||
|
||||
@protocol NSObject
|
||||
- (id)retain NS_AUTOMATED_REFCOUNT_UNAVAILABLE; // expected-note {{unavailable here}}
|
||||
- (id)retain NS_AUTOMATED_REFCOUNT_UNAVAILABLE;
|
||||
- (NSUInteger)retainCount NS_AUTOMATED_REFCOUNT_UNAVAILABLE;
|
||||
- (oneway void)release NS_AUTOMATED_REFCOUNT_UNAVAILABLE; // expected-note 4 {{unavailable here}}
|
||||
- (oneway void)release NS_AUTOMATED_REFCOUNT_UNAVAILABLE;
|
||||
- (id)autorelease NS_AUTOMATED_REFCOUNT_UNAVAILABLE;
|
||||
@end
|
||||
|
||||
|
@ -75,20 +75,16 @@ id global_foo;
|
|||
|
||||
void test1(A *a, BOOL b, struct UnsafeS *unsafeS) {
|
||||
[[a delegate] release]; // expected-error {{it is not safe to remove 'retain' message on the result of a 'delegate' message; the object that was passed to 'setDelegate:' may not be properly retained}} \
|
||||
// expected-error {{ARC forbids explicit message send}} \
|
||||
// expected-error {{unavailable}}
|
||||
// expected-error {{ARC forbids explicit message send}}
|
||||
[a.delegate release]; // expected-error {{it is not safe to remove 'retain' message on the result of a 'delegate' message; the object that was passed to 'setDelegate:' may not be properly retained}} \
|
||||
// expected-error {{ARC forbids explicit message send}} \
|
||||
// expected-error {{unavailable}}
|
||||
// expected-error {{ARC forbids explicit message send}}
|
||||
[unsafeS->unsafeObj retain]; // expected-error {{it is not safe to remove 'retain' message on an __unsafe_unretained type}} \
|
||||
// expected-error {{ARC forbids explicit message send}}
|
||||
id foo = [unsafeS->unsafeObj retain]; // no warning.
|
||||
[global_foo retain]; // expected-error {{it is not safe to remove 'retain' message on a global variable}} \
|
||||
// expected-error {{ARC forbids explicit message send}} \
|
||||
// expected-error {{unavailable}}
|
||||
// expected-error {{ARC forbids explicit message send}}
|
||||
[global_foo release]; // expected-error {{it is not safe to remove 'release' message on a global variable}} \
|
||||
// expected-error {{ARC forbids explicit message send}} \
|
||||
// expected-error {{unavailable}}
|
||||
// expected-error {{ARC forbids explicit message send}}
|
||||
[a dealloc];
|
||||
[a retain];
|
||||
[a retainCount]; // expected-error {{ARC forbids explicit message send of 'retainCount'}}
|
||||
|
@ -302,8 +298,7 @@ void rdar9491791(int p) {
|
|||
|
||||
// rdar://9504750
|
||||
void rdar9504750(id p) {
|
||||
RELEASE_MACRO(p); // expected-error {{ARC forbids explicit message send of 'release'}} \
|
||||
// expected-error {{unavailable}}
|
||||
RELEASE_MACRO(p); // expected-error {{ARC forbids explicit message send of 'release'}}
|
||||
}
|
||||
|
||||
// rdar://8939557
|
||||
|
|
|
@ -53,7 +53,7 @@ void t1(A *a)
|
|||
|
||||
void t2(id a)
|
||||
{
|
||||
[a f]; // expected-warning {{'f' is deprecated}}
|
||||
[a f];
|
||||
}
|
||||
|
||||
void t3(A<P>* a)
|
||||
|
@ -121,20 +121,3 @@ 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
|
||||
|
|
Загрузка…
Ссылка в новой задаче