1 // { dg-options "-fdiagnostics-show-caret" }
2
3 /* A collection of calls where argument 2 is of the wrong type. */
4
5 /* decl, with argname. */
6
7 extern int callee_1 (int one, const char *two, float three); // { dg-line callee_1 }
8
test_1(int first,int second,float third)9 int test_1 (int first, int second, float third)
10 {
11 return callee_1 (first, second, third); // { dg-error "invalid conversion from 'int' to 'const char\\*'" }
12 /* { dg-begin-multiline-output "" }
13 return callee_1 (first, second, third);
14 ^~~~~~
15 |
16 int
17 { dg-end-multiline-output "" } */
18 // { dg-message "initializing argument 2 of 'int callee_1\\(int, const char\\*, float\\)'" "" { target *-*-* } callee_1 }
19 /* { dg-begin-multiline-output "" }
20 extern int callee_1 (int one, const char *two, float three);
21 ~~~~~~~~~~~~^~~
22 { dg-end-multiline-output "" } */
23 }
24
25 /* decl, without argname. */
26
27 extern int callee_2 (int, const char *, float); // { dg-line callee_2 }
28
test_2(int first,int second,float third)29 int test_2 (int first, int second, float third)
30 {
31 return callee_2 (first, second, third); // { dg-error "invalid conversion from 'int' to 'const char\\*'" }
32 /* { dg-begin-multiline-output "" }
33 return callee_2 (first, second, third);
34 ^~~~~~
35 |
36 int
37 { dg-end-multiline-output "" } */
38 // { dg-message "initializing argument 2 of 'int callee_2\\(int, const char\\*, float\\)'" "" { target *-*-* } callee_2 }
39 /* { dg-begin-multiline-output "" }
40 extern int callee_2 (int, const char *, float);
41 ^~~~~~~~~~~~
42 { dg-end-multiline-output "" } */
43 }
44
45 /* defn, with argname. */
46
callee_3(int one,const char * two,float three)47 static int callee_3 (int one, const char *two, float three) // { dg-line callee_3 }
48 {
49 return callee_2 (one, two, three);
50 }
51
test_3(int first,int second,float third)52 int test_3 (int first, int second, float third)
53 {
54 return callee_3 (first, second, third); // { dg-error "invalid conversion from 'int' to 'const char\\*'" }
55 /* { dg-begin-multiline-output "" }
56 return callee_3 (first, second, third);
57 ^~~~~~
58 |
59 int
60 { dg-end-multiline-output "" } */
61 // { dg-message "initializing argument 2 of 'int callee_3\\(int, const char\\*, float\\)'" "" { target *-*-* } callee_3 }
62 /* { dg-begin-multiline-output "" }
63 static int callee_3 (int one, const char *two, float three)
64 ~~~~~~~~~~~~^~~
65 { dg-end-multiline-output "" } */
66 }
67
68 /* static member, with argname. */
69
70 struct s4 { static int member_1 (int one, const char *two, float three); };
71
test_4(int first,int second,float third)72 int test_4 (int first, int second, float third)
73 {
74 return s4::member_1 (first, second, third); // { dg-error "invalid conversion from 'int' to 'const char\\*'" }
75 /* { dg-begin-multiline-output "" }
76 return s4::member_1 (first, second, third);
77 ^~~~~~
78 |
79 int
80 { dg-end-multiline-output "" } */
81 /* { dg-begin-multiline-output "" }
82 struct s4 { static int member_1 (int one, const char *two, float three); };
83 ~~~~~~~~~~~~^~~
84 { dg-end-multiline-output "" } */
85 }
86
87 /* non-static member, with argname. */
88
89 struct s5 { int member_1 (int one, const char *two, float three); };
90
test_5(int first,int second,float third)91 int test_5 (int first, int second, float third)
92 {
93 s5 inst;
94 return inst.member_1 (first, second, third); // { dg-error "invalid conversion from 'int' to 'const char\\*'" }
95 /* { dg-begin-multiline-output "" }
96 return inst.member_1 (first, second, third);
97 ^~~~~~
98 |
99 int
100 { dg-end-multiline-output "" } */
101 /* { dg-begin-multiline-output "" }
102 struct s5 { int member_1 (int one, const char *two, float three); };
103 ~~~~~~~~~~~~^~~
104 { dg-end-multiline-output "" } */
105 }
106
107 /* non-static member, with argname, via a ptr. */
108
109 struct s6 { int member_1 (int one, const char *two, float three); };
110
test_6(int first,int second,float third,s6 * ptr)111 int test_6 (int first, int second, float third, s6 *ptr)
112 {
113 return ptr->member_1 (first, second, third); // { dg-error "invalid conversion from 'int' to 'const char\\*'" }
114 /* { dg-begin-multiline-output "" }
115 return ptr->member_1 (first, second, third);
116 ^~~~~~
117 |
118 int
119 { dg-end-multiline-output "" } */
120 /* { dg-begin-multiline-output "" }
121 struct s6 { int member_1 (int one, const char *two, float three); };
122 ~~~~~~~~~~~~^~~
123 { dg-end-multiline-output "" } */
124 }
125
126 /* Template function. */
127
128 template <typename T>
129 int test_7 (int one, T two, float three);
130
test_7(int first,int second,float third)131 int test_7 (int first, int second, float third)
132 {
133 return test_7 <const char *> (first, second, third); // { dg-error "invalid conversion from 'int' to 'const char\\*'" }
134 /* { dg-begin-multiline-output "" }
135 return test_7 <const char *> (first, second, third);
136 ^~~~~~
137 |
138 int
139 { dg-end-multiline-output "" } */
140 /* { dg-begin-multiline-output "" }
141 int test_7 (int one, T two, float three);
142 ~~^~~
143 { dg-end-multiline-output "" } */
144 }
145
146 /* Template class, static function. */
147
148 template <typename T>
149 struct s8 { static int member_1 (int one, T two, float three); };
150
test_8(int first,int second,float third)151 int test_8 (int first, int second, float third)
152 {
153 return s8 <const char *>::member_1 (first, second, third); // { dg-error "invalid conversion from 'int' to 'const char\\*'" }
154 /* { dg-begin-multiline-output "" }
155 return s8 <const char *>::member_1 (first, second, third);
156 ^~~~~~
157 |
158 int
159 { dg-end-multiline-output "" } */
160 /* { dg-begin-multiline-output "" }
161 struct s8 { static int member_1 (int one, T two, float three); };
162 ~~^~~
163 { dg-end-multiline-output "" } */
164 }
165
166 /* Template class, non-static function. */
167
168 template <typename T>
169 struct s9 { int member_1 (int one, T two, float three); };
170
test_9(int first,int second,float third)171 int test_9 (int first, int second, float third)
172 {
173 s9 <const char *> inst;
174 return inst.member_1 (first, second, third); // { dg-error "invalid conversion from 'int' to 'const char\\*'" }
175 /* { dg-begin-multiline-output "" }
176 return inst.member_1 (first, second, third);
177 ^~~~~~
178 |
179 int
180 { dg-end-multiline-output "" } */
181 /* { dg-begin-multiline-output "" }
182 struct s9 { int member_1 (int one, T two, float three); };
183 ~~^~~
184 { dg-end-multiline-output "" } */
185 }
186
187 /* Callback with name. */
188
189 extern int callee_10 (int one, int (*two)(int, int), float three); // { dg-line callee_10 }
190
test_10(int first,int second,float third)191 int test_10 (int first, int second, float third)
192 {
193 return callee_10 (first, second, third); // { dg-error "invalid conversion from 'int' to 'int \\(\\*\\)\\(int, int\\)'" }
194 /* { dg-begin-multiline-output "" }
195 return callee_10 (first, second, third);
196 ^~~~~~
197 |
198 int
199 { dg-end-multiline-output "" } */
200 // { dg-message "initializing argument 2 of 'int callee_10\\(int, int \\(\\*\\)\\(int, int\\), float\\)'" "" { target *-*-* } callee_10 }
201 /* { dg-begin-multiline-output "" }
202 extern int callee_10 (int one, int (*two)(int, int), float three);
203 ~~~~~~^~~~~~~~~~~~~~
204 { dg-end-multiline-output "" } */
205 }
206
207 /* Callback without name. */
208
209 extern int callee_11 (int one, int (*)(int, int), float three); // { dg-line callee_11 }
210
test_11(int first,int second,float third)211 int test_11 (int first, int second, float third)
212 {
213 return callee_11 (first, second, third); // { dg-error "invalid conversion from 'int' to 'int \\(\\*\\)\\(int, int\\)'" }
214 /* { dg-begin-multiline-output "" }
215 return callee_11 (first, second, third);
216 ^~~~~~
217 |
218 int
219 { dg-end-multiline-output "" } */
220 // { dg-message "initializing argument 2 of 'int callee_11\\(int, int \\(\\*\\)\\(int, int\\), float\\)'" "" { target *-*-* } callee_11 }
221 /* { dg-begin-multiline-output "" }
222 extern int callee_11 (int one, int (*)(int, int), float three);
223 ^~~~~~~~~~~~~~~~~
224 { dg-end-multiline-output "" } */
225 }
226
227 /* Bad reference. */
228
229 struct s12;
230
231 extern int callee_12 (int one, s12 &second, float three); // { dg-line callee_12 }
232
test_12(int first,int second,float third)233 int test_12 (int first, int second, float third)
234 {
235 return callee_12 (first, second, third); // { dg-error "invalid initialization of reference of " }
236 /* { dg-begin-multiline-output "" }
237 return callee_12 (first, second, third);
238 ^~~~~~
239 { dg-end-multiline-output "" } */
240 // { dg-message "in passing argument 2 of " "" { target *-*-* } callee_12 }
241 /* { dg-begin-multiline-output "" }
242 extern int callee_12 (int one, s12 &second, float three);
243 ~~~~~^~~~~~
244 { dg-end-multiline-output "" } */
245 }
246
247 /* Incomplete type. */
248
249 struct s13;
250
251 extern int callee_13 (int one, s13 second, float three); // { dg-line callee_13 }
252
test_13(int first,int second,float third)253 int test_13 (int first, int second, float third)
254 {
255 return callee_13 (first, second, third); // { dg-error "has incomplete type" }
256 /* { dg-begin-multiline-output "" }
257 return callee_13 (first, second, third);
258 ^~~~~~
259 { dg-end-multiline-output "" } */
260 // { dg-message "declared here" "" { target *-*-* } callee_13 }
261 /* { dg-begin-multiline-output "" }
262 extern int callee_13 (int one, s13 second, float three);
263 ~~~~^~~~~~
264 { dg-end-multiline-output "" } */
265 }
266
267
268 // TODO: template callsite
269