24ae22c047
The objc_runtime_visible attribute deals with an odd corner case where a particular Objective-C class is known to the Objective-C runtime (and, therefore, accessible by name) but its symbol has been hidden for some reason. For such classes, teach CodeGen to use objc_lookUpClass to retrieve the Class object, rather than referencing the class symbol directly. Classes annotated with objc_runtime_visible have two major limitations that fall out from places where Objective-C metadata needs to refer to the class (or metaclass) symbol directly: * One cannot implement a subclass of an objc_runtime_visible class. * One cannot implement a category on an objc_runtime_visible class. Implements rdar://problem/25494092. llvm-svn: 265201
20 lines
432 B
Objective-C
20 lines
432 B
Objective-C
// RUN: %clang_cc1 -verify -fsyntax-only %s
|
|
|
|
__attribute__((objc_runtime_visible))
|
|
@interface A
|
|
@end
|
|
|
|
@interface A(X)
|
|
@end
|
|
|
|
@implementation A(X) // expected-error{{cannot implement a category for class 'A' that is only visible via the Objective-C runtime}}
|
|
@end
|
|
|
|
@interface B : A
|
|
@end
|
|
|
|
@implementation B // expected-error{{cannot implement subclass 'B' of a superclass 'A' that is only visible via the Objective-C runtime}}
|
|
@end
|
|
|
|
|