llvm-for-llvmta/tools/clang/test/SemaObjC/subclassing-restricted-attr.m

37 lines
1.1 KiB
Objective-C

// RUN: %clang_cc1 -fsyntax-only -verify -Wno-objc-root-class %s
// RUN: %clang_cc1 -x objective-c++ -fsyntax-only -verify -Wno-objc-root-class %s
// rdar://16560476
__attribute__((objc_subclassing_restricted))
@interface Leaf // okay
@end
__attribute__((objc_subclassing_restricted))
@interface SubClassOfLeaf : Leaf // expected-note {{class is declared here}}
@end
@interface SubClass : SubClassOfLeaf // expected-error {{cannot subclass a class that was declared with the 'objc_subclassing_restricted' attribute}}
@end
__attribute__((objc_root_class))
@interface PlainRoot
@end
__attribute__((objc_subclassing_restricted))
@interface Sub2Class : PlainRoot // okay
@end
// rdar://28753587
__attribute__((objc_subclassing_restricted))
@interface SuperImplClass // expected-note {{class is declared here}}
@end
@implementation SuperImplClass
@end
__attribute__((objc_subclassing_restricted))
@interface SubImplClass : SuperImplClass
@end
@implementation SubImplClass // expected-error {{cannot subclass a class that was declared with the 'objc_subclassing_restricted' attribute}}
@end