[InstCombine] Preserve NSW flags for `lshr (mul nuw X, C1), C2 -> mul nuw nsw X,...
[llvm-project.git] / clang / test / SemaObjC / objc-boxed-expressions-nsvalue.m
blob73ef0168b494373ffc635829386823d7908f7108
1 // RUN: %clang_cc1  -fsyntax-only -triple x86_64-apple-macosx10.9 -verify %s
3 #define BOXABLE __attribute__((objc_boxable))
5 typedef struct BOXABLE _NSPoint {
6   int dummy;
7 } NSPoint;
9 typedef struct BOXABLE _NSSize {
10   int dummy;
11 } NSSize;
13 typedef struct BOXABLE _NSRect {
14   int dummy;
15 } NSRect;
17 typedef struct BOXABLE _CGPoint {
18   int dummy;
19 } CGPoint;
21 typedef struct BOXABLE _CGSize {
22   int dummy;
23 } CGSize;
25 typedef struct BOXABLE _CGRect {
26   int dummy;
27 } CGRect;
29 typedef struct BOXABLE _NSRange {
30   int dummy;
31 } NSRange;
33 struct _NSEdgeInsets {
34   int dummy;
37 typedef struct BOXABLE _NSEdgeInsets NSEdgeInsets;
39 typedef struct _SomeStruct {
40   double d;
41 } SomeStruct;
43 typedef union BOXABLE _BoxableUnion {
44   int dummy;
45 } BoxableUnion;
47 void checkNSValueDiagnostic(void) {
48   NSRect rect;
49   id value = @(rect); // expected-error{{definition of class NSValue must be available to use Objective-C boxed expressions}}
52 @interface NSValue
53 + (NSValue *)valueWithBytes:(const void *)value objCType:(const char *)type;
54 @end
56 int main(void) {
57   NSPoint ns_point;
58   id ns_point_value = @(ns_point);
60   NSSize ns_size;
61   id ns_size_value = @(ns_size);
63   NSRect ns_rect;
64   id ns_rect_value = @(ns_rect);
66   CGPoint cg_point;
67   id cg_point_value = @(cg_point);
69   CGSize cg_size;
70   id cg_size_value = @(cg_size);
72   CGRect cg_rect;
73   id cg_rect_value = @(cg_rect);
75   NSRange ns_range;
76   id ns_range_value = @(ns_range);
78   NSEdgeInsets edge_insets;
79   id edge_insets_object = @(edge_insets);
81   BoxableUnion boxable_union;
82   id boxed_union = @(boxable_union);
84   SomeStruct s;
85   id err = @(s); // expected-error{{illegal type 'SomeStruct' (aka 'struct _SomeStruct') used in a boxed expression}}
88 CGRect getRect(void) {
89   CGRect r;
90   return r;
93 SomeStruct getSomeStruct(void) {
94   SomeStruct s;
95   return s;
98 void 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}}