xref: /llvm-project/clang/test/SemaObjC/protocol-qualified-class-unsupported.m (revision c6e68daac0fa6e77a89f3ca72f266a528503dd1c)
18fbe78f6SDaniel Dunbar// RUN: %clang_cc1 -fsyntax-only -verify %s
2*c6e68daaSAndy Gibbs// expected-no-diagnostics
3ebc790d4SSteve Naroff
4ebc790d4SSteve Naroff#include <stddef.h>
5ebc790d4SSteve Naroff
6ebc790d4SSteve Narofftypedef struct objc_class *Class;
7ebc790d4SSteve Narofftypedef struct objc_object {
8ebc790d4SSteve Naroff    Class isa;
9ebc790d4SSteve Naroff} *id;
10ebc790d4SSteve Naroffid objc_getClass(const char *s);
11ebc790d4SSteve Naroff
12ebc790d4SSteve Naroff@interface Object
13ebc790d4SSteve Naroff+ self;
14ebc790d4SSteve Naroff@end
15ebc790d4SSteve Naroff
16ebc790d4SSteve Naroff@protocol Func
17ebc790d4SSteve Naroff+ (void) class_func0;
18ebc790d4SSteve Naroff- (void) instance_func0;
19ebc790d4SSteve Naroff@end
20ebc790d4SSteve Naroff
21ebc790d4SSteve Naroff@interface Derived: Object <Func>
22ebc790d4SSteve Naroff@end
23ebc790d4SSteve Naroff
24ebc790d4SSteve Naroff@interface Derived2: Object <Func>
25ebc790d4SSteve Naroff@end
26ebc790d4SSteve Naroff
2751d4f79fSSteve Naroffstatic void doSomething(Class <Func> unsupportedObjectType) {
28ebc790d4SSteve Naroff  [unsupportedObjectType class_func0];
29ebc790d4SSteve Naroff}
30ebc790d4SSteve Naroff
31ebc790d4SSteve Naroffstatic void doSomethingElse(id <Func> pleaseConvertToThisType) {
32ebc790d4SSteve Naroff  [pleaseConvertToThisType class_func0];
33ebc790d4SSteve Naroff}
34ebc790d4SSteve Naroff
35ebc790d4SSteve Naroffint main(int argv, char *argc[]) {
36ebc790d4SSteve Naroff  doSomething([Derived self]);
37ebc790d4SSteve Naroff  doSomething([Derived2 self]);
38ebc790d4SSteve Naroff  doSomethingElse([Derived self]);
39ebc790d4SSteve Naroff  doSomethingElse([Derived2 self]);
40ebc790d4SSteve Naroff}
41ebc790d4SSteve Naroff
42