Nested loop test

This commit is contained in:
Connor Fitzgerald 2024-02-27 15:27:53 -05:00 committed by Teodor Tanasoaia
parent 330a8608e3
commit 8129897ccb
4 changed files with 68 additions and 1 deletions

View File

@ -124,6 +124,10 @@ Bottom level categories:
- Fix behavior of integer `clamp` when `min` argument > `max` argument. By @cwfitzgerald in [#5300](https://github.com/gfx-rs/wgpu/pull/5300).
- Fix missing validation for `Device::clear_buffer` where `offset + size buffer.size` was not checked when `size` was omitted. By @ErichDonGubler in [#5282](https://github.com/gfx-rs/wgpu/pull/5282).
#### glsl-in
- Fix code generation from nested loops. By @cwfitzgerald and @teoxoy in [#5311](https://github.com/gfx-rs/wgpu/pull/5311)
#### WGL
- In Surface::configure and Surface::present, fix the current GL context not being unset when releasing the lock that guards access to making the context current. This was causing other threads to panic when trying to make the context current. By @Imberflur in [#5087](https://github.com/gfx-rs/wgpu/pull/5087).

View File

@ -435,7 +435,7 @@ impl<'source> ParsingContext<'source> {
if self.bump_if(frontend, TokenValue::Semicolon).is_none() {
if self.peek_type_name(frontend) || self.peek_type_qualifier(frontend) {
self.parse_declaration(frontend, ctx, false, false)?;
self.parse_declaration(frontend, ctx, false, is_inside_loop)?;
} else {
let mut stmt = ctx.stmt_ctx();
let expr = self.parse_expression(frontend, ctx, &mut stmt)?;

View File

@ -0,0 +1,12 @@
// AUTHOR: cwfitzgerald
// ISSUE: #5246
void main() {
for (int x = 0; x < 10; x++) {
for (int y = 0; y < 10; y++) {
for (int z = 0; z < 10; z++) {
;
}
}
}
}

View File

@ -0,0 +1,51 @@
fn main_1() {
var x: i32 = 0i;
var y: i32;
var z: i32;
loop {
let _e2 = x;
if !((_e2 < 10i)) {
break;
}
{
y = 0i;
loop {
let _e11 = y;
if !((_e11 < 10i)) {
break;
}
{
z = 0i;
loop {
let _e20 = z;
if !((_e20 < 10i)) {
break;
}
{
}
continuing {
let _e24 = z;
z = (_e24 + 1i);
}
}
}
continuing {
let _e15 = y;
y = (_e15 + 1i);
}
}
}
continuing {
let _e6 = x;
x = (_e6 + 1i);
}
}
return;
}
@fragment
fn main() {
main_1();
return;
}