Mesa (master): glsl: Fix scoping bug in if statements.

Kenneth Graunke kwg at kemper.freedesktop.org
Wed Aug 18 20:59:34 UTC 2010


Module: Mesa
Branch: master
Commit: 665d75cc5a23f8024034d0c4176fb281f94a30e9
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=665d75cc5a23f8024034d0c4176fb281f94a30e9

Author: Kenneth Graunke <kenneth at whitecape.org>
Date:   Wed Aug 18 13:54:50 2010 -0700

glsl: Fix scoping bug in if statements.

Fixes glslparsertest/glsl2/scoping-01.frag (successfully compiled but
should've failed) and scoping-02.frag (assertion triggered).

---

 src/glsl/ast_to_hir.cpp |   10 ++++++++--
 1 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp
index 6e5d01e..bd1ab78 100644
--- a/src/glsl/ast_to_hir.cpp
+++ b/src/glsl/ast_to_hir.cpp
@@ -2395,11 +2395,17 @@ ast_selection_statement::hir(exec_list *instructions,
 
    ir_if *const stmt = new(ctx) ir_if(condition);
 
-   if (then_statement != NULL)
+   if (then_statement != NULL) {
+      state->symbols->push_scope();
       then_statement->hir(& stmt->then_instructions, state);
+      state->symbols->pop_scope();
+   }
 
-   if (else_statement != NULL)
+   if (else_statement != NULL) {
+      state->symbols->push_scope();
       else_statement->hir(& stmt->else_instructions, state);
+      state->symbols->pop_scope();
+   }
 
    instructions->push_tail(stmt);
 




More information about the mesa-commit mailing list