forked from OSchip/llvm-project
Warn on usage of unavailable objc 'class' in
varienty of cases. // rdar://9092208 llvm-svn: 127257
This commit is contained in:
parent
cd5d3ee8c4
commit
08891f5249
|
@ -212,6 +212,7 @@ ParsedType Sema::getTypeName(IdentifierInfo &II, SourceLocation NameLoc,
|
|||
}
|
||||
}
|
||||
} else if (ObjCInterfaceDecl *IDecl = dyn_cast<ObjCInterfaceDecl>(IIDecl)) {
|
||||
(void)DiagnoseUseOfDecl(IDecl, NameLoc);
|
||||
if (!HasTrailingDot)
|
||||
T = Context.getObjCInterfaceType(IDecl);
|
||||
}
|
||||
|
|
|
@ -868,7 +868,7 @@ ExprResult Sema::BuildClassMessage(TypeSourceInfo *ReceiverTypeInfo,
|
|||
return ExprError();
|
||||
}
|
||||
assert(Class && "We don't know which class we're messaging?");
|
||||
|
||||
(void)DiagnoseUseOfDecl(Class, Loc);
|
||||
// Find the method we are messaging.
|
||||
if (!Method) {
|
||||
if (Class->isForwardDecl()) {
|
||||
|
|
|
@ -0,0 +1,24 @@
|
|||
// RUN: %clang_cc1 -fsyntax-only -verify %s
|
||||
// rdar://9092208
|
||||
|
||||
__attribute__((unavailable("not available")))
|
||||
@interface MyClass { // expected-note 5 {{function has been explicitly marked unavailable here}}
|
||||
@public
|
||||
void *_test;
|
||||
}
|
||||
|
||||
- (id)self;
|
||||
- new;
|
||||
+ (void)addObject:(id)anObject;
|
||||
|
||||
@end
|
||||
|
||||
int main() {
|
||||
[MyClass new]; // expected-error {{'MyClass' is unavailable: not available}}
|
||||
[MyClass self]; // expected-error {{'MyClass' is unavailable: not available}}
|
||||
[MyClass addObject:((void *)0)]; // expected-error {{'MyClass' is unavailable: not available}}
|
||||
|
||||
MyClass *foo = [MyClass new]; // expected-error 2 {{'MyClass' is unavailable: not available}}
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue