OLD | NEW |
---|---|
1 /* | 1 /* |
2 * Copyright 2016 Google Inc. | 2 * Copyright 2016 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 #include "SkSLCompiler.h" | 8 #include "SkSLCompiler.h" |
9 | 9 |
10 #include "Test.h" | 10 #include "Test.h" |
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
174 DEF_TEST(SkSLUsingInvalidValue, r) { | 174 DEF_TEST(SkSLUsingInvalidValue, r) { |
175 test_failure(r, | 175 test_failure(r, |
176 "void main() { int x = int; }", | 176 "void main() { int x = int; }", |
177 "error: 1: expected '(' to begin constructor invocation\n1 erro r\n"); | 177 "error: 1: expected '(' to begin constructor invocation\n1 erro r\n"); |
178 test_failure(r, | 178 test_failure(r, |
179 "int test() { return 1; } void main() { int x = test; }", | 179 "int test() { return 1; } void main() { int x = test; }", |
180 "error: 1: expected '(' to begin function call\n1 error\n"); | 180 "error: 1: expected '(' to begin function call\n1 error\n"); |
181 } | 181 } |
182 DEF_TEST(SkSLDifferentReturnType, r) { | 182 DEF_TEST(SkSLDifferentReturnType, r) { |
183 test_failure(r, | 183 test_failure(r, |
184 "int main() { } void main() { }", | 184 "int main() { return 1; } void main() { }", |
185 "error: 1: functions 'void main()' and 'int main()' differ only in return type\n1 " | 185 "error: 1: functions 'void main()' and 'int main()' differ only in return type\n1 " |
186 "error\n"); | 186 "error\n"); |
187 } | 187 } |
188 | 188 |
189 DEF_TEST(SkSLDifferentModifiers, r) { | 189 DEF_TEST(SkSLDifferentModifiers, r) { |
190 test_failure(r, | 190 test_failure(r, |
191 "void test(int x); void test(out int x) { }", | 191 "void test(int x); void test(out int x) { }", |
192 "error: 1: modifiers on parameter 1 differ between declaration and definition\n1 " | 192 "error: 1: modifiers on parameter 1 differ between declaration and definition\n1 " |
193 "error\n"); | 193 "error\n"); |
194 } | 194 } |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
271 test_failure(r, | 271 test_failure(r, |
272 "void main() { int x = 5 > 2 ? true : 1.0; }", | 272 "void main() { int x = 5 > 2 ? true : 1.0; }", |
273 "error: 1: ternary operator result mismatch: 'bool', 'float'\n1 error\n"); | 273 "error: 1: ternary operator result mismatch: 'bool', 'float'\n1 error\n"); |
274 } | 274 } |
275 | 275 |
276 DEF_TEST(SkSLInterfaceBlockStorageModifiers, r) { | 276 DEF_TEST(SkSLInterfaceBlockStorageModifiers, r) { |
277 test_failure(r, | 277 test_failure(r, |
278 "uniform foo { out int x; };", | 278 "uniform foo { out int x; };", |
279 "error: 1: interface block fields may not have storage qualifie rs\n1 error\n"); | 279 "error: 1: interface block fields may not have storage qualifie rs\n1 error\n"); |
280 } | 280 } |
281 | |
282 DEF_TEST(SkSLUseWithoutInitialize, r) { | |
283 test_failure(r, | |
284 "void main() { int x; if (5 == 2) x = 3; x++; }", | |
285 "error: 1: 'x' has not been assigned\n1 error\n"); | |
286 test_failure(r, | |
287 "void main() { int x[2][2]; int i; x[i][1] = 4; }", | |
288 "error: 1: 'i' has not been assigned\n1 error\n"); | |
289 test_failure(r, | |
290 "int main() { int r; return r; }", | |
291 "error: 1: 'r' has not been assigned\n1 error\n"); | |
292 test_failure(r, | |
293 "void main() { int x; int y; x = y; }", | |
dogben
2016/10/13 19:12:43
nit: I mentioned this case for the var declaration
| |
294 "error: 1: 'y' has not been assigned\n1 error\n"); | |
295 test_failure(r, | |
296 "void main() { bool x; if (true && (false || x)) return; }", | |
297 "error: 1: 'x' has not been assigned\n1 error\n"); | |
298 } | |
299 | |
300 DEF_TEST(SkSLUnreachable, r) { | |
301 test_failure(r, | |
302 "void main() { return; return; }", | |
303 "error: 1: unreachable\n1 error\n"); | |
304 test_failure(r, | |
305 "void main() { for (;;) { continue; int x = 1; } }", | |
306 "error: 1: unreachable\n1 error\n"); | |
307 test_failure(r, | |
308 "void main() { for (;;) { } return; }", | |
309 "error: 1: unreachable\n1 error\n"); | |
310 test_failure(r, | |
311 "void main() { if (true) return; else discard; return; }", | |
312 "error: 1: unreachable\n1 error\n"); | |
313 test_failure(r, | |
314 "void main() { return; while (true); }", | |
315 "error: 1: unreachable\n1 error\n"); | |
316 } | |
317 | |
318 DEF_TEST(SkSLNoReturn, r) { | |
319 test_failure(r, | |
320 "int foo() { if (2 > 5) return 3; }", | |
321 "error: 1: function can exit without returning a value\n1 error \n"); | |
322 } | |
323 | |
324 DEF_TEST(SkSLBreakOutsideLoop, r) { | |
325 test_failure(r, | |
326 "void foo() { while(true) {} if (true) break; }", | |
327 "error: 1: break statement must be inside a loop\n1 error\n"); | |
328 } | |
329 | |
330 DEF_TEST(SkSLContinueOutsideLoop, r) { | |
331 test_failure(r, | |
332 "void foo() { for(;;); continue; }", | |
333 "error: 1: continue statement must be inside a loop\n1 error\n" ); | |
334 } | |
OLD | NEW |