From 16dc993d4f01f6882933953115abc6ec7d93ba0b Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Thu, 24 Jul 2008 15:49:09 -0600 Subject: [PATCH] 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. --- src/mesa/shader/slang/slang_codegen.c | 14 ++++---------- src/mesa/shader/slang/slang_emit.c | 4 +--- 2 files changed, 5 insertions(+), 13 deletions(-) diff --git a/src/mesa/shader/slang/slang_codegen.c b/src/mesa/shader/slang/slang_codegen.c index 6b2e45b..e23cad6 100644 --- a/src/mesa/shader/slang/slang_codegen.c +++ b/src/mesa/shader/slang/slang_codegen.c @@ -2172,22 +2172,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 { diff --git a/src/mesa/shader/slang/slang_emit.c b/src/mesa/shader/slang/slang_emit.c index c288946..1f4d962 100644 --- a/src/mesa/shader/slang/slang_emit.c +++ b/src/mesa/shader/slang/slang_emit.c @@ -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 */ } } } -- 2.7.4