summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKenneth Graunke <[email protected]>2010-08-18 13:54:50 -0700
committerKenneth Graunke <[email protected]>2010-08-18 14:03:25 -0700
commit665d75cc5a23f8024034d0c4176fb281f94a30e9 (patch)
tree3069da049deff7566bae8bfca749aeee05a9304a
parentcf37ba34301374aecf16fea659ac70b000a11a55 (diff)
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).
-rw-r--r--src/glsl/ast_to_hir.cpp10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp
index 6e5d01ee265..bd1ab78d4aa 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);