mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-02-04 19:20:38 +01:00
mesa: gls: fix broken else clause of conditional break/continue
In the following case:
for () {
if (cond)
break; // or continue;
else
something;
}
The "something" block didn't get emitted.
This commit is contained in:
parent
643228c506
commit
7b2ef2b884
2 changed files with 5 additions and 13 deletions
|
|
@ -2194,22 +2194,16 @@ _slang_gen_if(slang_assemble_ctx * A, const slang_operation *oper)
|
|||
cond = _slang_gen_operation(A, &oper->children[0]);
|
||||
cond = new_cond(cond);
|
||||
|
||||
if (is_operation_type(&oper->children[1], SLANG_OPER_BREAK)) {
|
||||
if (is_operation_type(&oper->children[1], SLANG_OPER_BREAK)
|
||||
&& !haveElseClause) {
|
||||
/* Special case: generate a conditional break */
|
||||
ifBody = new_break_if_true(A->CurLoop, cond);
|
||||
if (haveElseClause) {
|
||||
elseBody = _slang_gen_operation(A, &oper->children[2]);
|
||||
return new_seq(ifBody, elseBody);
|
||||
}
|
||||
return ifBody;
|
||||
}
|
||||
else if (is_operation_type(&oper->children[1], SLANG_OPER_CONTINUE)) {
|
||||
else if (is_operation_type(&oper->children[1], SLANG_OPER_CONTINUE)
|
||||
&& !haveElseClause) {
|
||||
/* Special case: generate a conditional break */
|
||||
ifBody = new_cont_if_true(A->CurLoop, cond);
|
||||
if (haveElseClause) {
|
||||
elseBody = _slang_gen_operation(A, &oper->children[2]);
|
||||
return new_seq(ifBody, elseBody);
|
||||
}
|
||||
return ifBody;
|
||||
}
|
||||
else {
|
||||
|
|
|
|||
|
|
@ -161,9 +161,7 @@ free_temp_storage(slang_var_table *vt, slang_ir_node *n)
|
|||
if (_slang_is_temp(vt, n->Store)) {
|
||||
_slang_free_temp(vt, n->Store);
|
||||
n->Store->Index = -1;
|
||||
n->Store->Size = -1;
|
||||
/*_mesa_free(n->Store);*/ /* XXX leak */
|
||||
n->Store = NULL;
|
||||
n->Store = NULL; /* XXX this may not be needed */
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue