brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.0 KiB · 73ef016 Raw
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