diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
index 852dcea..e91b3aa 100644
--- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
+++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
@@ -632,11 +632,26 @@ glsl_to_tgsi_visitor::get_opcode(ir_instruction *ir, unsigned op,
         		 st_src_reg src0, st_src_reg src1)
 {
    int type = GLSL_TYPE_FLOAT;
-   
+
+   if (0) {
+      /* XXX the first assertion fails */
+      assert(src0.type != GLSL_TYPE_ARRAY);
+      assert(src0.type != GLSL_TYPE_STRUCT);
+      assert(src1.type != GLSL_TYPE_ARRAY);
+      assert(src1.type != GLSL_TYPE_STRUCT);
+   }
+
    if (src0.type == GLSL_TYPE_FLOAT || src1.type == GLSL_TYPE_FLOAT)
       type = GLSL_TYPE_FLOAT;
-   else if (native_integers)
-      type = src0.type == GLSL_TYPE_BOOL ? GLSL_TYPE_INT : src0.type;
+   else if (native_integers) {
+      if (src0.type == GLSL_TYPE_BOOL ||
+          src1.type == GLSL_TYPE_BOOL) {
+         type = GLSL_TYPE_INT;
+      }
+      else {
+         type = src0.type;
+      }
+   }
 
 #define case4(c, f, i, u) \
    case TGSI_OPCODE_##c: \
