diff options
author | Paul Berry <[email protected]> | 2013-11-27 10:12:53 -0800 |
---|---|---|
committer | Paul Berry <[email protected]> | 2013-11-29 21:46:20 -0800 |
commit | a810db7b84b00763ce9ccbf40baee3f534057a80 (patch) | |
tree | 7b8ff168a6503376fc482622e7bbe5d210afaada | |
parent | d6eb4321d0e62b6b391ad88ce390bd6e23d79747 (diff) |
glsl: In ir_validate, check that ir_loop::counter always refers to a new var.
The compiler back-ends (i965's fs_visitor and brw_visitor,
ir_to_mesa_visitor, and glsl_to_tgsi_visitor) have been assuming this
for some time. Thanks to the preceding patch, the compiler front-end
no longer breaks this assumption.
This patch adds code to validate the assumption so that if we have
future bugs, we'll be able to catch them earlier.
Reviewed-by: Eric Anholt <[email protected]>
Reviewed-by: Kenneth Graunke <[email protected]>
-rw-r--r-- | src/glsl/ir_validate.cpp | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/glsl/ir_validate.cpp b/src/glsl/ir_validate.cpp index 13e41a08901..26d63883422 100644 --- a/src/glsl/ir_validate.cpp +++ b/src/glsl/ir_validate.cpp @@ -63,6 +63,7 @@ public: virtual ir_visitor_status visit_enter(ir_if *ir); + virtual ir_visitor_status visit_enter(ir_loop *ir); virtual ir_visitor_status visit_leave(ir_loop *ir); virtual ir_visitor_status visit_enter(ir_function *ir); virtual ir_visitor_status visit_leave(ir_function *ir); @@ -149,6 +150,18 @@ ir_validate::visit_enter(ir_if *ir) ir_visitor_status +ir_validate::visit_enter(ir_loop *ir) +{ + if (ir->counter != NULL && hash_table_find(ht, ir->counter) != NULL) { + printf("ir_loop @ %p specifies already-declared variable `%s' @ %p\n", + (void *) ir, ir->counter->name, (void *) ir->counter); + abort(); + } + return visit_continue; +} + + +ir_visitor_status ir_validate::visit_leave(ir_loop *ir) { if (ir->counter != NULL) { |