1// RUN: %clang_cc1 -fsyntax-only -verify -Wattributes -fpascal-strings %s 2 3typedef long NSInteger; 4typedef unsigned long NSUInteger; 5typedef signed char BOOL; 6 7@interface NSNumber 8@end 9@interface NSNumber (NSNumberCreation) 10+ (NSNumber *)numberWithChar:(char)value; 11+ (NSNumber *)numberWithUnsignedChar:(unsigned char)value; 12+ (NSNumber *)numberWithShort:(short)value; 13+ (NSNumber *)numberWithUnsignedShort:(unsigned short)value; 14+ (NSNumber *)numberWithInt:(int)value; 15+ (NSNumber *)numberWithUnsignedInt:(unsigned int)value; 16+ (NSNumber *)numberWithLong:(long)value; 17+ (NSNumber *)numberWithUnsignedLong:(unsigned long)value; 18+ (NSNumber *)numberWithLongLong:(long long)value; 19+ (NSNumber *)numberWithUnsignedLongLong:(unsigned long long)value; 20+ (NSNumber *)numberWithFloat:(float)value; 21+ (NSNumber *)numberWithDouble:(double)value; 22+ (NSNumber *)numberWithBool:(BOOL)value; 23+ (NSNumber *)numberWithInteger:(NSInteger)value; 24+ (NSNumber *)numberWithUnsignedInteger:(NSUInteger)value; 25@end 26 27typedef struct { 28 int x, y, z; 29} point; 30 31void testStruct() { 32 point p = { 0, 0, 0 }; 33 id boxed = @(p); // expected-error {{illegal type 'point' used in a boxed expression}} 34} 35 36void testPointers() { 37 void *null = 0; 38 id boxed_null = @(null); // expected-error {{illegal type 'void *' used in a boxed expression}} 39 int numbers[] = { 0, 1, 2 }; 40 id boxed_numbers = @(numbers); // expected-error {{illegal type 'int *' used in a boxed expression}} 41} 42 43void testInvalid() { 44 @(not_defined); // expected-error {{use of undeclared identifier 'not_defined'}} 45} 46 47enum MyEnum { 48 ME_foo 49}; 50 51enum ForwE; 52 53void testEnum(void *p) { 54 enum MyEnum myen; 55 id box = @(myen); 56 box = @(ME_foo); 57 box = @(*(enum ForwE*)p); // expected-error {{incomplete type 'enum ForwE' used in a boxed expression}} 58} 59 60@interface NSString 61@end 62 63void testStringLiteral() { 64 NSString *s; 65 s = @("abc"); 66 s = @(u8"abc"); 67 s = @(u"abc"); // expected-error {{illegal type 'unsigned short *' used in a boxed expression}} 68 s = @(U"abc"); // expected-error {{illegal type 'unsigned int *' used in a boxed expression}} 69 s = @(L"abc"); // expected-error-re {{illegal type {{.*}} used in a boxed expression}} 70 s = @("\pabc"); // expected-error {{illegal type 'unsigned char *' used in a boxed expression}} 71} 72 73// rdar://13333205 74@class NSMutableDictionary; 75 76@interface NSMutableArray 77+ (NSMutableArray*) array; 78@end 79 80NSMutableDictionary* mBars; 81 82__attribute((objc_root_class)) @interface rdar13333205 @end 83 84@implementation rdar13333205 85- (void) insertBar:(id)preset ofKind:(id) kind atIndex:(int)index { 86 NSMutableArray* presetArray = mBars[kind] ?: [NSMutableArray array]; // expected-error {{expected method to read dictionary element not found on object of type 'NSMutableDictionary *'}} 87} 88@end 89