diff --git a/packages/typegpu/src/tgsl/wgslGenerator.ts b/packages/typegpu/src/tgsl/wgslGenerator.ts index 26f66067e4..46bc0a665e 100644 --- a/packages/typegpu/src/tgsl/wgslGenerator.ts +++ b/packages/typegpu/src/tgsl/wgslGenerator.ts @@ -1861,7 +1861,7 @@ ${this.ctx.pre}else ${alternate}`, : value instanceof ArrayExpression ? value.elements : Array.from({ length: knownEnd.value as number }, (_, i) => - forOfUtils.getElementSnippet(iterableSnippet, snip(i, u32, 'constant')), + forOfUtils.getElementSnippet(iterableSnippet, snip(i, u32, 'constant', false)), ); if (elements.length === 0) { diff --git a/packages/typegpu/tests/unroll.test.ts b/packages/typegpu/tests/unroll.test.ts index 2fe5a5b746..810444f12b 100644 --- a/packages/typegpu/tests/unroll.test.ts +++ b/packages/typegpu/tests/unroll.test.ts @@ -985,4 +985,18 @@ describe('tgpu.unroll', () => { }" `); }); + + it('does not introduce possibleSideEffects', () => { + const arr = tgpu.accessor(d.arrayOf(d.f32, 3), [1, 2, 3]); + + const f = () => { + 'use gpu'; + for (const value of tgpu.unroll(arr.$)) { + const _known = std.isKnownAtComptime(value); + } + }; + + const code = tgpu.resolve([f]); + expect(code).toMatchNTimes(/true/g, 3); + }); });