struct S { a : i32, b : vec4<f32>, c : mat2x2<f32>, } @group(0) @binding(0) var<storage, read_write> v : S; var<private> i : u32; fn idx1() -> i32 { i += 1u; return 1; } fn idx2() -> i32 { i += 2u; return 1; } fn idx3() -> i32 { i += 3u; return 1; } fn foo() { var a = array<f32, 4>(); // Make sure that the functions are only evaluated once each. for (a[idx1()] *= 2.0; a[idx2()] < 10.0; a[idx3()] += 1.0) { } }