<!DOCTYPE html>
<html>
<meta charset=utf-8>
<meta name="timeout" content="long">
<title>load/store to null.</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.storeNullArrayRef = async () => {
    await checkFail(
        `
            void foo() { null[0] = 42; }
        `);
}

whlslTests.loadNullArrayRef = async () => {
    await checkFail(
        `
            void sink(thread int* x) { }
            void foo() { sink(null[0]); }
        `);
}

whlslTests.nullNamedAccess = async () => {
    await checkFail(
        `
            void foo() { null->x; }
        `);
}

whlslTests.nullNamedAccess2 = async () => {
    await checkFail(
        `
            void foo() { null.x; }
        `);
}

whlslTests.nullNamedAccessSink = async () => {
    await checkFail(
        `
            void sink(int x) { }
            void foo() { sink(null->x); }
        `);
}

whlslTests.nullNamedAccessSink2 = async () => {
    await checkFail(
        `
            void sink(int x) { }
            void foo() { sink(null.x); }
        `);
}

runTests(whlslTests);
</script>
</html>
