| <!DOCTYPE html> |
| <html> |
| <meta charset=utf-8> |
| <meta name="timeout" content="long"> |
| <title>Lvalues.</title> |
| <script src="js/test-harness.js"></script> |
| <script src="../js/webgpu-functions.js"></script> |
| <script src="../../resources/testharness.js"></script> |
| <script src="../../resources/testharnessreport.js"></script> |
| <script> |
| const whlslTests = {}; |
| |
| whlslTests.lValues = async () => { |
| await checkFail(` |
| int foo() |
| { |
| int x = 0; |
| thread int* y = &(x++); |
| return *y; |
| } |
| `); |
| await checkFail(` |
| int foo() |
| { |
| int x = 0; |
| thread int* y = &(++x); |
| return *y; |
| } |
| `); |
| await checkFail(` |
| int foo() |
| { |
| int x = 0; |
| thread int* y = &(x = 3); |
| return *y; |
| } |
| `); |
| await checkFail(` |
| int foo() |
| { |
| int x = 0; |
| thread int* y = &3; |
| return *y; |
| } |
| `); |
| await checkFail(` |
| int bar(int x) { |
| return x + 1; |
| } |
| int foo() |
| { |
| int x = 0; |
| thread int* y = &bar(3); |
| return *y; |
| } |
| `); |
| await checkFail(` |
| int foo() |
| { |
| int x = 0; |
| thread int* y = &(7, x); |
| return *y; |
| } |
| `); |
| await checkFail(` |
| enum Days { |
| Monday, |
| Tuesday |
| } |
| int foo() |
| { |
| int x = 0; |
| thread int* y = &(Days.Monday); |
| return *y; |
| } |
| `); |
| await checkFail(` |
| int foo() |
| { |
| thread bool* y = &(true && false); |
| return *y; |
| } |
| `); |
| await checkFail(` |
| int foo() |
| { |
| thread bool* y = &(!true); |
| return *y; |
| } |
| `); |
| const program = ` |
| int foo() |
| { |
| int x = 3; |
| thread int* y = &x; |
| return *y; |
| } |
| `; |
| assert_equals(await callIntFunction(program, "foo", []), 3); |
| }; |
| |
| runTests(whlslTests); |
| </script> |
| </html> |
| |
| |