102 lines · plain
1// RUN: %clang_cc1 -fsyntax-only -triple x86_64-apple-macosx10.9 -verify %s2 3#define BOXABLE __attribute__((objc_boxable))4 5typedef struct BOXABLE _NSPoint {6 int dummy;7} NSPoint;8 9typedef struct BOXABLE _NSSize {10 int dummy;11} NSSize;12 13typedef struct BOXABLE _NSRect {14 int dummy;15} NSRect;16 17typedef struct BOXABLE _CGPoint {18 int dummy;19} CGPoint;20 21typedef struct BOXABLE _CGSize {22 int dummy;23} CGSize;24 25typedef struct BOXABLE _CGRect {26 int dummy;27} CGRect;28 29typedef struct BOXABLE _NSRange {30 int dummy;31} NSRange;32 33struct _NSEdgeInsets {34 int dummy;35};36 37typedef struct BOXABLE _NSEdgeInsets NSEdgeInsets;38 39typedef struct _SomeStruct {40 double d;41} SomeStruct;42 43typedef union BOXABLE _BoxableUnion {44 int dummy;45} BoxableUnion;46 47void checkNSValueDiagnostic(void) {48 NSRect rect;49 id value = @(rect); // expected-error{{definition of class NSValue must be available to use Objective-C boxed expressions}}50}51 52@interface NSValue53+ (NSValue *)valueWithBytes:(const void *)value objCType:(const char *)type;54@end55 56int main(void) {57 NSPoint ns_point;58 id ns_point_value = @(ns_point);59 60 NSSize ns_size;61 id ns_size_value = @(ns_size);62 63 NSRect ns_rect;64 id ns_rect_value = @(ns_rect);65 66 CGPoint cg_point;67 id cg_point_value = @(cg_point);68 69 CGSize cg_size;70 id cg_size_value = @(cg_size);71 72 CGRect cg_rect;73 id cg_rect_value = @(cg_rect);74 75 NSRange ns_range;76 id ns_range_value = @(ns_range);77 78 NSEdgeInsets edge_insets;79 id edge_insets_object = @(edge_insets);80 81 BoxableUnion boxable_union;82 id boxed_union = @(boxable_union);83 84 SomeStruct s;85 id err = @(s); // expected-error{{illegal type 'SomeStruct' (aka 'struct _SomeStruct') used in a boxed expression}}86}87 88CGRect getRect(void) {89 CGRect r;90 return r;91}92 93SomeStruct getSomeStruct(void) {94 SomeStruct s;95 return s;96}97 98void rvalue(void) {99 id rv_rect = @(getRect());100 id rv_some_struct = @(getSomeStruct()); // expected-error {{illegal type 'SomeStruct' (aka 'struct _SomeStruct') used in a boxed expression}}101}102