glsl: Change loop_analysis to not look like a resource leak

Previously the loop_state was allocated in the loop_analysis
constructor, but not freed in the (nonexistent) destructor.  Moving
the allocation of the loop_state makes this code appear less sketchy.

Either way, there is no actual leak.  The loop_state is freed by the
single caller of analyze_loop_variables.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Cc: Dave Airlie <airlied@freedesktop.org>
Reviewed-by: Matt Turner <mattst88@gmail.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=57753
This commit is contained in:
Ian Romanick 2012-07-10 16:26:33 -07:00
parent 04f0d6cc22
commit 82691f1293
2 changed files with 7 additions and 8 deletions

View File

@ -105,7 +105,7 @@ loop_variable_state::insert(ir_if *if_stmt)
class loop_analysis : public ir_hierarchical_visitor {
public:
loop_analysis();
loop_analysis(loop_state *loops);
virtual ir_visitor_status visit(ir_loop_jump *);
virtual ir_visitor_status visit(ir_dereference_variable *);
@ -129,12 +129,10 @@ public:
};
loop_analysis::loop_analysis()
loop_analysis::loop_analysis(loop_state *loops)
: loops(loops), if_statement_depth(0), current_assignment(NULL)
{
this->loops = new loop_state;
this->if_statement_depth = 0;
this->current_assignment = NULL;
/* empty */
}
@ -521,7 +519,8 @@ is_loop_terminator(ir_if *ir)
loop_state *
analyze_loop_variables(exec_list *instructions)
{
loop_analysis v;
loop_state *loops = new loop_state;
loop_analysis v(loops);
v.run(instructions);
return v.loops;

View File

@ -249,7 +249,7 @@ private:
void *mem_ctx;
friend class loop_analysis;
friend loop_state *analyze_loop_variables(exec_list *instructions);
};
#endif /* LOOP_ANALYSIS_H */