[AMDGPU][True16][CodeGen] true16 codegen pattern for v_med3_u/i16 (#121850)
[llvm-project.git] / clang / test / SemaObjCXX / message.mm
blobec82d63ea908b9108d2ddd4f6960bc054391e3c7
1 // RUN: %clang_cc1 -fsyntax-only -fobjc-runtime=macosx-fragile-10.5 -verify -Wno-objc-root-class %s
2 // RUN: %clang_cc1 -fsyntax-only -fobjc-runtime=macosx-fragile-10.5 -verify -Wno-objc-root-class -std=c++98 %s
3 // RUN: %clang_cc1 -fsyntax-only -fobjc-runtime=macosx-fragile-10.5 -verify -Wno-objc-root-class -std=c++11 %s
5 @interface I1
6 - (int*)method;
7 @end
9 @implementation I1
10 - (int*)method {
11   struct x { };
12   [x method]; // expected-error{{receiver type 'x' is not an Objective-C class}}
13   return 0;
15 @end
17 typedef struct { int x; } ivar;
19 @interface I2 {
20   id ivar;
22 - (int*)method;
23 + (void)method;
24 @end
26 struct I2_holder {
27   I2_holder();
29   I2 *get();
32 I2 *operator+(I2_holder, int);
34 @implementation I2
35 - (int*)method {
36   [ivar method];
38   // Test instance messages that start with a simple-type-specifier.
39   [I2_holder().get() method];
40   [I2_holder().get() + 17 method];
41   return 0;
43 + (void)method {
44   [ivar method]; // expected-error{{receiver type 'ivar' is not an Objective-C class}}
46 @end
48 // Class message sends
49 @interface I3
50 + (int*)method;
51 @end
53 @interface I4 : I3
54 + (int*)otherMethod;
55 @end
57 template<typename T>
58 struct identity {
59   typedef T type;
62 @implementation I4
63 + (int *)otherMethod {
64   // Test class messages that use non-trivial simple-type-specifiers
65   // or typename-specifiers.
66   if (false) {
67     if (true)
68       return [typename identity<I3>::type method];
69 #if __cplusplus <= 199711L
70       // expected-warning@-2 {{'typename' occurs outside of a template}}
71 #endif
73     return [::I3 method];
74   }
76   int* ip1 = {[super method]};
77   int* ip2 = {[::I3 method]};
78   int* ip3 = {[typename identity<I3>::type method]};
79 #if __cplusplus <= 199711L
80   // expected-warning@-2 {{'typename' occurs outside of a template}}
81 #endif
83   int* ip4 = {[typename identity<I2_holder>::type().get() method]};
84 #if __cplusplus <= 199711L
85   // expected-warning@-2 {{'typename' occurs outside of a template}}
86 #endif
87   int array[5] = {[3] = 2}; // expected-warning {{C99 extension}}
88   return [super method];
90 @end
92 struct String {
93   String(const char *);
96 struct MutableString : public String { };
98 // C++-specific parameter types
99 @interface I5
100 - method:(const String&)str1 
101    other:(String&)str2; // expected-note{{passing argument to parameter 'str2' here}}
102 @end
104 void test_I5(I5 *i5, String s) {
105   [i5 method:"hello" other:s];
106   [i5 method:s other:"world"]; // expected-error{{non-const lvalue reference to type 'String' cannot bind to a value of unrelated type 'const char[6]'}}
109 @interface A
111 struct X { };
113 + (A *)create:(void (*)(void *x, X r, void *data))callback
114               callbackData:(void *)callback_data;
116 @end
119 void foo(void)
121   void *fun;
122   void *ptr;
123   X r;
124   A *im = [A create:(void (*)(void *cgl_ctx, X r, void *data)) fun
125              callbackData:ptr];
128 template<typename T> struct X1; // expected-note{{template is declared here}}
130 @interface B
131 + (X1<int>)blah;
132 + (X1<float>&)blarg;
133 @end
135 void f() {
136   [B blah]; // expected-error{{implicit instantiation of undefined template 'X1<int>'}}
137   [B blarg];