glsl: Check the size of ir_print_visitor's mode[] array with STATIC_ASSERT.
authorPaul Berry <stereotype441@gmail.com>
Tue, 9 Apr 2013 17:03:11 +0000 (10:03 -0700)
committerPaul Berry <stereotype441@gmail.com>
Tue, 9 Apr 2013 17:19:22 +0000 (10:19 -0700)
ir_print_visitor::visit(ir_variable *)'s mode[] array needs to match
the declaration of the enum ir_variable_mode.  It's hard to verify
that at compile time, but at least we can use a STATIC_ASSERT to make
sure it's the right size.

This required adding ir_var_mode_count to the enum.

src/glsl/ir.h
src/glsl/ir_print_visitor.cpp

index 0c3e39979a32ea5ff502b965905402e3e102983d..3018e0fbb164f4a5b3674ee714ebd46f2d9e10b3 100644 (file)
@@ -273,7 +273,8 @@ enum ir_variable_mode {
    ir_var_function_inout,
    ir_var_const_in,    /**< "in" param that must be a constant expression */
    ir_var_system_value, /**< Ex: front-face, instance-id, etc. */
-   ir_var_temporary    /**< Temporary variable generated during compilation. */
+   ir_var_temporary,   /**< Temporary variable generated during compilation. */
+   ir_var_mode_count   /**< Number of variable modes */
 };
 
 /**
index fb0dd08f810b74352a2bcc1c52a45747da72573c..f01019c9877029fda383cda8bfddfd0593e3f7b2 100644 (file)
@@ -150,6 +150,7 @@ void ir_print_visitor::visit(ir_variable *ir)
    const char *const mode[] = { "", "uniform ", "shader_in ", "shader_out ",
                                 "in ", "out ", "inout ",
                                "const_in ", "sys ", "temporary " };
+   STATIC_ASSERT(ARRAY_SIZE(mode) == ir_var_mode_count);
    const char *const interp[] = { "", "smooth", "flat", "noperspective" };
    STATIC_ASSERT(ARRAY_SIZE(interp) == INTERP_QUALIFIER_COUNT);