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