X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;ds=sidebyside;f=source%2Fprogramcompiler.cpp;h=4e4b4814f171b531bfffedea17c9b9d46101fab1;hb=ced18c244f874638dc17ae486802bb3bb01ecf71;hp=c7da6c5535b96bf649c8640522f9cdc07d459f1d;hpb=42c783eb553949aae85d5f5b5ea9d0d9776780e1;p=libs%2Fgl.git diff --git a/source/programcompiler.cpp b/source/programcompiler.cpp index c7da6c55..4e4b4814 100644 --- a/source/programcompiler.cpp +++ b/source/programcompiler.cpp @@ -1212,7 +1212,8 @@ void ProgramCompiler::ConstantConditionEliminator::visit(Iteration &iter) ProgramCompiler::UnusedVariableLocator::UnusedVariableLocator(): aggregate(0), assignment(0), - assignment_target(false) + assignment_target(false), + iteration(false) { } void ProgramCompiler::UnusedVariableLocator::apply(Stage &s) @@ -1233,6 +1234,9 @@ void ProgramCompiler::UnusedVariableLocator::visit(VariableReference &var) if(assignment_target) return; + if(iteration) + used_in_iteration.insert(var.declaration); + for(vector::iterator j=assignments.end(); j!=assignments.begin(); ) { --j; @@ -1277,7 +1281,8 @@ void ProgramCompiler::UnusedVariableLocator::visit(Assignment &assign) void ProgramCompiler::UnusedVariableLocator::record_assignment(VariableDeclaration &var, Node &node, bool self_ref) { - unused_nodes.insert(&node); + if(!used_in_iteration.count(&var)) + unused_nodes.insert(&node); BlockAssignmentMap &block_assignments = assignments.back(); AssignmentList &var_assignments = block_assignments[&var]; if(!self_ref) @@ -1404,8 +1409,13 @@ void ProgramCompiler::UnusedVariableLocator::visit(Conditional &cond) void ProgramCompiler::UnusedVariableLocator::visit(Iteration &iter) { assignments.push_back(BlockAssignmentMap()); - TraversingVisitor::visit(iter); + { + SetFlag set(iteration); + TraversingVisitor::visit(iter); + } merge_down_assignments(); + if(!iteration) + used_in_iteration.clear(); }