mirror of
https://github.com/Gericom/teak-llvm.git
synced 2025-06-25 22:38:56 -04:00

Objective-C type arguments can be provided in angle brackets following an Objective-C interface type. Syntactically, this is the same position as one would provide protocol qualifiers (e.g., id<NSCopying>), so parse both together and let Sema sort out the ambiguous cases. This applies both when parsing types and when parsing the superclass of an Objective-C class, which can now be a specialized type (e.g., NSMutableArray<T> inherits from NSArray<T>). Check Objective-C type arguments against the type parameters of the corresponding class. Verify the length of the type argument list and that each type argument satisfies the corresponding bound. Specializations of parameterized Objective-C classes are represented in the type system as distinct types. Both specialized types (e.g., NSArray<NSString *> *) and unspecialized types (NSArray *) are represented, separately. llvm-svn: 241542
39 lines
875 B
Objective-C
39 lines
875 B
Objective-C
// RUN: %clang_cc1 -triple i386-apple-darwin9 -fobjc-runtime=macosx-fragile-10.5 %s -fsyntax-only -verify
|
|
// rdar://5957506
|
|
|
|
@interface NSWhatever :
|
|
NSObject // expected-error {{cannot find interface declaration for 'NSObject'}}
|
|
<NSCopying> // expected-error {{no type or protocol named 'NSCopying'}}
|
|
@end
|
|
|
|
|
|
// rdar://6095245
|
|
@interface A
|
|
{
|
|
int x
|
|
} // expected-error {{expected ';' at end of declaration list}}
|
|
@end
|
|
|
|
|
|
// rdar://4304469
|
|
@interface INT1
|
|
@end
|
|
|
|
void test2() {
|
|
// rdar://6827200
|
|
INT1 b[3]; // expected-error {{array of interface 'INT1' is invalid (probably should be an array of pointers)}}
|
|
INT1 *c = &b[0];
|
|
++c;
|
|
}
|
|
|
|
|
|
// rdar://6611778
|
|
@interface FOO // expected-note {{previous definition is here}}
|
|
- (void)method;
|
|
@end
|
|
|
|
@interface FOO // expected-error {{duplicate interface definition for class 'FOO'}}
|
|
- (void)method2;
|
|
@end
|
|
|