| 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; }", |
| 294 "error: 1: 'x' 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 |