]> git.tdb.fi Git - libs/gl.git/blobdiff - source/glsl/optimize.cpp
Record assignment targets more precisely
[libs/gl.git] / source / glsl / optimize.cpp
index 414cf38754191a85d8b6643811c3dc5c4764f4b4..85f97faecd108452bb15b9f3b5508f7c503e8c92 100644 (file)
@@ -479,9 +479,9 @@ void ExpressionInliner::visit(Assignment &assign)
        r_oper = 0;
        visit_and_record(assign.right, assign.oper, true);
 
-       if(assign.target_declaration)
+       if(VariableDeclaration *target_var = dynamic_cast<VariableDeclaration *>(assign.target.declaration))
        {
-               map<VariableDeclaration *, ExpressionInfo>::iterator i = expressions.find(assign.target_declaration);
+               map<VariableDeclaration *, ExpressionInfo>::iterator i = expressions.find(target_var);
                if(i!=expressions.end())
                {
                        /* Self-referencing assignments can't be inlined without additional
@@ -838,8 +838,9 @@ void UnusedVariableRemover::visit(ExpressionStatement &expr)
        r_assign_to_subfield = false;
        r_side_effects = false;
        TraversingVisitor::visit(expr);
-       if(r_assignment && r_assignment->target_declaration)
-               record_assignment(*r_assignment->target_declaration, expr, (r_assignment->self_referencing || r_assign_to_subfield));
+       if(r_assignment && r_assignment->target.declaration)
+               if(VariableDeclaration *target_var = dynamic_cast<VariableDeclaration *>(r_assignment->target.declaration))
+                       record_assignment(*target_var, expr, (r_assignment->self_referencing || r_assign_to_subfield));
        if(!r_side_effects)
                unused_nodes.insert(&expr);
 }