glsl: Fix scoping bug in if statements.
authorKenneth Graunke <kenneth@whitecape.org>
Wed, 18 Aug 2010 20:54:50 +0000 (13:54 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Wed, 18 Aug 2010 21:03:25 +0000 (14:03 -0700)
Fixes glslparsertest/glsl2/scoping-01.frag (successfully compiled but
should've failed) and scoping-02.frag (assertion triggered).

src/glsl/ast_to_hir.cpp

index 6e5d01e..bd1ab78 100644 (file)
@@ -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);