[Mesa-dev] [PATCH 2/2] glsl: Prefer unreachable("condition") over assert(!"condition")

Ian Romanick idr at freedesktop.org
Fri Dec 5 13:40:25 PST 2014


On 12/05/2014 01:17 PM, Carl Worth wrote:
> The unreachable macro has the advantage (for modern compilers) of
> hinting to the compiler that this code is actually unreachable, which
> can help reduce spurious warnings, etc.
> 
> Also, this version is a bit easier to type correctly and understand
> when reading without that seemingly out-of-place logical negation.
> 
> These were all found with the following:
> 
> 	git grep 'assert(! *"' -- src/glsl
> 
> and then replaced automatically.

There are a bunch of "remove this ..." comments below.  I also think the
"Should not get here" comments should get replace with something more
reasonable.  Most distros build without -DNDEBUG, so I tried to use the
same string over and over to keep the bloat down.  If the strings only
exist in debug builds, there's no reason to be stingy.

There are also a couple spots that I think should remain asserts.  I've
commented on those below.

> 
> ---
> 
> I did this only for for the glsl directory for now. There are still many more
> of these throughout mesa's source tree, but it felt like it would be far too
> invasive to make a change like this globally.
> 
> So most of the changes here are in the glsl_types.cpp file where I was already
> working, and then there are just small numbers in many of the files in the
> same directory.
> 
> 
>  src/glsl/ast_function.cpp                        |  4 +--
>  src/glsl/ast_to_hir.cpp                          |  8 ++---
>  src/glsl/glcpp/glcpp-parse.y                     |  2 +-
>  src/glsl/glsl_parser_extras.cpp                  |  4 +--
>  src/glsl/glsl_symbol_table.cpp                   |  4 +--
>  src/glsl/glsl_types.cpp                          | 14 ++++-----
>  src/glsl/ir.cpp                                  | 38 ++++++++++++------------
>  src/glsl/ir.h                                    |  2 +-
>  src/glsl/ir_clone.cpp                            |  2 +-
>  src/glsl/ir_constant_expression.cpp              |  8 ++---
>  src/glsl/ir_equals.cpp                           |  2 +-
>  src/glsl/ir_set_program_inouts.cpp               |  2 +-
>  src/glsl/ir_validate.cpp                         |  2 +-
>  src/glsl/ir_visitor.h                            |  2 +-
>  src/glsl/link_interface_blocks.cpp               |  2 +-
>  src/glsl/link_uniform_block_active_visitor.cpp   |  2 +-
>  src/glsl/link_uniform_blocks.cpp                 |  2 +-
>  src/glsl/link_uniform_initializers.cpp           |  4 +--
>  src/glsl/link_uniforms.cpp                       |  2 +-
>  src/glsl/link_varyings.cpp                       |  4 +--
>  src/glsl/loop_analysis.cpp                       |  2 +-
>  src/glsl/loop_controls.cpp                       |  2 +-
>  src/glsl/lower_packed_varyings.cpp               |  4 +--
>  src/glsl/lower_packing_builtins.cpp              |  2 +-
>  src/glsl/lower_ubo_reference.cpp                 |  6 ++--
>  src/glsl/lower_variable_index_to_cond_assign.cpp |  2 +-
>  src/glsl/lower_vector.cpp                        |  2 +-
>  src/glsl/opt_constant_propagation.cpp            |  4 +--
>  src/glsl/opt_minmax.cpp                          |  2 +-
>  29 files changed, 68 insertions(+), 68 deletions(-)
> 
> diff --git a/src/glsl/ast_function.cpp b/src/glsl/ast_function.cpp
> index cbff9d8..60a5414 100644
> --- a/src/glsl/ast_function.cpp
> +++ b/src/glsl/ast_function.cpp
> @@ -661,7 +661,7 @@ dereference_component(ir_rvalue *src, unsigned component)
>        return dereference_component(col, r);
>     }
>  
> -   assert(!"Should not get here.");
> +   unreachable("Should not get here.");
>     return NULL;

Remove this return.

>  }
>  
> @@ -1016,7 +1016,7 @@ emit_inline_vector_constructor(const glsl_type *type,
>  		  data.b[i + base_component] = c->get_bool_component(i);
>  		  break;
>  	       default:
> -		  assert(!"Should not get here.");
> +		  unreachable("Should not get here.");
>  		  break;
>  	       }
>  	    }
> diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp
> index 811a955..ae68142 100644
> --- a/src/glsl/ast_to_hir.cpp
> +++ b/src/glsl/ast_to_hir.cpp
> @@ -1193,7 +1193,7 @@ ast_expression::do_hir(exec_list *instructions,
>  
>     switch (this->oper) {
>     case ast_aggregate:
> -      assert(!"ast_aggregate: Should never get here.");
> +      unreachable("ast_aggregate: Should never get here.");
>        break;
>  
>     case ast_assign: {
> @@ -2314,7 +2314,7 @@ validate_explicit_location(const struct ast_type_qualifier *qual,
>                 : (qual->location + VARYING_SLOT_VAR0);
>              break;
>           case MESA_SHADER_COMPUTE:
> -            assert(!"Unexpected shader type");
> +            unreachable("Unexpected shader type");
>              break;
>           }
>        } else {
> @@ -5412,7 +5412,7 @@ ast_interface_block::hir(exec_list *instructions,
>     } else {
>        var_mode = ir_var_auto;
>        iface_type_name = "UNKNOWN";
> -      assert(!"interface block layout qualifier not found!");
> +      unreachable("interface block layout qualifier not found!");
>     }
>  
>     enum glsl_matrix_layout matrix_layout = GLSL_MATRIX_LAYOUT_INHERITED;
> @@ -6008,7 +6008,7 @@ remove_per_vertex_blocks(exec_list *instructions,
>        }
>        break;
>     default:
> -      assert(!"Unexpected mode");
> +      unreachable("Unexpected mode");
>        break;
>     }
>  
> diff --git a/src/glsl/glcpp/glcpp-parse.y b/src/glsl/glcpp/glcpp-parse.y
> index f1119eb..f1c006e 100644
> --- a/src/glsl/glcpp/glcpp-parse.y
> +++ b/src/glsl/glcpp/glcpp-parse.y
> @@ -1169,7 +1169,7 @@ _token_print (char **out, size_t *len, token_t *token)
>  		/* Nothing to print. */
>  		break;
>  	default:
> -		assert(!"Error: Don't know how to print token.");
> +		unreachable("Error: Don't know how to print token.");
>  
>  		break;
>  	}
> diff --git a/src/glsl/glsl_parser_extras.cpp b/src/glsl/glsl_parser_extras.cpp
> index 6893c7b..968b33c 100644
> --- a/src/glsl/glsl_parser_extras.cpp
> +++ b/src/glsl/glsl_parser_extras.cpp
> @@ -348,7 +348,7 @@ _mesa_glsl_parse_state::process_version_directive(YYLTYPE *locp, int version,
>  	 break;
>  
>        case API_OPENGLES:
> -	 assert(!"Should not get here.");
> +	 unreachable("Should not get here.");
>  	 /* FALLTHROUGH */
>  
>        case API_OPENGLES2:
> @@ -372,7 +372,7 @@ _mesa_shader_stage_to_string(unsigned stage)
>     case MESA_SHADER_GEOMETRY: return "geometry";
>     }
>  
> -   assert(!"Should not get here.");
> +   unreachable("Should not get here.");
>     return "unknown";

Remove this return.

>  }
>  
> diff --git a/src/glsl/glsl_symbol_table.cpp b/src/glsl/glsl_symbol_table.cpp
> index 2294dda..fdb9b33 100644
> --- a/src/glsl/glsl_symbol_table.cpp
> +++ b/src/glsl/glsl_symbol_table.cpp
> @@ -43,7 +43,7 @@ public:
>           dest = &ibo;
>           break;
>        default:
> -         assert(!"Unsupported interface variable mode!");
> +         unreachable("Unsupported interface variable mode!");
>           return false;

Remove this return.

>        }
>  
> @@ -65,7 +65,7 @@ public:
>        case ir_var_shader_out:
>           return ibo;
>        default:
> -         assert(!"Unsupported interface variable mode!");
> +         unreachable("Unsupported interface variable mode!");
>           return NULL;

Remove this return.

>        }
>     }
> diff --git a/src/glsl/glsl_types.cpp b/src/glsl/glsl_types.cpp
> index d46d180..7f16fe3 100644
> --- a/src/glsl/glsl_types.cpp
> +++ b/src/glsl/glsl_types.cpp
> @@ -239,7 +239,7 @@ glsl_type::sampler_index() const
>     case GLSL_SAMPLER_DIM_MS:
>        return (t->sampler_array) ? TEXTURE_2D_MULTISAMPLE_ARRAY_INDEX : TEXTURE_2D_MULTISAMPLE_INDEX;
>     default:
> -      assert(!"Should not get here.");
> +      unreachable("Should not get here.");
>        return TEXTURE_BUFFER_INDEX;

Remove this return.

>     }
>  }
> @@ -471,7 +471,7 @@ glsl_type::get_instance(unsigned base_type, unsigned rows, unsigned columns)
>        }
>     }
>  
> -   assert(!"Should not get here.");
> +   unreachable("Should not get here.");
>     return error_type;

Remove this return.

>  }
>  
> @@ -582,7 +582,7 @@ glsl_type::get_sampler_instance(enum glsl_sampler_dim dim,
>        }
>     }
>  
> -   assert(!"Should not get here.");
> +   unreachable("Should not get here.");
>     return error_type;

Remove this return.

>  }
>  
> @@ -1011,7 +1011,7 @@ glsl_type::std140_base_alignment(bool row_major) const
>        return base_alignment;
>     }
>  
> -   assert(!"not reached");
> +   unreachable("not reached");
>     return -1;

Remove this return.

>  }
>  
> @@ -1138,7 +1138,7 @@ glsl_type::std140_size(bool row_major) const
>        return size;
>     }
>  
> -   assert(!"not reached");
> +   unreachable("not reached");
>     return -1;

Remove this return.

>  }
>  
> @@ -1194,7 +1194,7 @@ glsl_type::count_attribute_slots() const
>        break;
>     }
>  
> -   assert(!"Unexpected type in count_attribute_slots()");
> +   unreachable("Unexpected type in count_attribute_slots()");
>  
>     return 0;

Remove this return.

>  }
> @@ -1220,7 +1220,7 @@ glsl_type::coordinate_components() const
>        size = 3;
>        break;
>     default:
> -      assert(!"Should not get here.");
> +      unreachable("Should not get here.");
>        size = 1;

Remove this assignment.

>        break;
>     }
> diff --git a/src/glsl/ir.cpp b/src/glsl/ir.cpp
> index fe5601a..0f83557 100644
> --- a/src/glsl/ir.cpp
> +++ b/src/glsl/ir.cpp
> @@ -61,7 +61,7 @@ update_rhs_swizzle(ir_swizzle_mask &m, unsigned from, unsigned to)
>     case 1: m.y = from; break;
>     case 2: m.z = from; break;
>     case 3: m.w = from; break;
> -   default: assert(!"Should not get here.");
> +   default: unreachable("Should not get here.");
>     }
>  
>     m.num_components = MAX2(m.num_components, (to + 1));
> @@ -90,7 +90,7 @@ ir_assignment::set_lhs(ir_rvalue *lhs)
>  	 case 1: c = swiz->mask.y; break;
>  	 case 2: c = swiz->mask.z; break;
>  	 case 3: c = swiz->mask.w; break;
> -	 default: assert(!"Should not get here.");
> +	 default: unreachable("Should not get here.");
>  	 }
>  
>  	 write_mask |= (((this->write_mask >> i) & 1) << c);
> @@ -317,7 +317,7 @@ ir_expression::ir_expression(int op, ir_rvalue *op0)
>        break;
>  
>     default:
> -      assert(!"not reached: missing automatic type setup for ir_expression");
> +      unreachable("not reached: missing automatic type setup for ir_expression");
>        this->type = op0->type;

Remove this assignment.

>        break;
>     }
> @@ -414,7 +414,7 @@ ir_expression::ir_expression(int op, ir_rvalue *op0, ir_rvalue *op1)
>        break;
>  
>     default:
> -      assert(!"not reached: missing automatic type setup for ir_expression");
> +      unreachable("not reached: missing automatic type setup for ir_expression");
>        this->type = glsl_type::float_type;

Remove this assignment.

>     }
>  }
> @@ -445,7 +445,7 @@ ir_expression::ir_expression(int op, ir_rvalue *op0, ir_rvalue *op1,
>        break;
>  
>     default:
> -      assert(!"not reached: missing automatic type setup for ir_expression");
> +      unreachable("not reached: missing automatic type setup for ir_expression");
>        this->type = glsl_type::float_type;

Remove this assignment.

>     }
>  }
> @@ -695,7 +695,7 @@ ir_constant::ir_constant(const ir_constant *c, unsigned i)
>     case GLSL_TYPE_INT:   this->value.i[0] = c->value.i[i]; break;
>     case GLSL_TYPE_FLOAT: this->value.f[0] = c->value.f[i]; break;
>     case GLSL_TYPE_BOOL:  this->value.b[0] = c->value.b[i]; break;
> -   default:              assert(!"Should not get here."); break;
> +   default:              unreachable("Should not get here."); break;
>     }
>  }
>  
> @@ -766,7 +766,7 @@ ir_constant::ir_constant(const struct glsl_type *type, exec_list *value_list)
>  	       this->value.b[i] = value->value.b[0];
>  	    break;
>  	 default:
> -	    assert(!"Should not get here.");
> +	    unreachable("Should not get here.");
>  	    break;
>  	 }
>        }
> @@ -869,7 +869,7 @@ ir_constant::get_bool_component(unsigned i) const
>     case GLSL_TYPE_INT:   return this->value.i[i] != 0;
>     case GLSL_TYPE_FLOAT: return ((int)this->value.f[i]) != 0;
>     case GLSL_TYPE_BOOL:  return this->value.b[i];
> -   default:              assert(!"Should not get here."); break;
> +   default:              unreachable("Should not get here."); break;
>     }
>  
>     /* Must return something to make the compiler happy.  This is clearly an

The code after this comment (and the comment) can be removed

> @@ -886,7 +886,7 @@ ir_constant::get_float_component(unsigned i) const
>     case GLSL_TYPE_INT:   return (float) this->value.i[i];
>     case GLSL_TYPE_FLOAT: return this->value.f[i];
>     case GLSL_TYPE_BOOL:  return this->value.b[i] ? 1.0f : 0.0f;
> -   default:              assert(!"Should not get here."); break;
> +   default:              unreachable("Should not get here."); break;
>     }
>  
>     /* Must return something to make the compiler happy.  This is clearly an

Ditto

> @@ -903,7 +903,7 @@ ir_constant::get_int_component(unsigned i) const
>     case GLSL_TYPE_INT:   return this->value.i[i];
>     case GLSL_TYPE_FLOAT: return (int) this->value.f[i];
>     case GLSL_TYPE_BOOL:  return this->value.b[i] ? 1 : 0;
> -   default:              assert(!"Should not get here."); break;
> +   default:              unreachable("Should not get here."); break;
>     }
>  
>     /* Must return something to make the compiler happy.  This is clearly an

Ditto

> @@ -920,7 +920,7 @@ ir_constant::get_uint_component(unsigned i) const
>     case GLSL_TYPE_INT:   return this->value.i[i];
>     case GLSL_TYPE_FLOAT: return (unsigned) this->value.f[i];
>     case GLSL_TYPE_BOOL:  return this->value.b[i] ? 1 : 0;
> -   default:              assert(!"Should not get here."); break;
> +   default:              unreachable("Should not get here."); break;
>     }
>  
>     /* Must return something to make the compiler happy.  This is clearly an

Ditto

> @@ -1026,7 +1026,7 @@ ir_constant::copy_offset(ir_constant *src, int offset)
>     }
>  
>     default:
> -      assert(!"Should not get here.");
> +      unreachable("Should not get here.");
>        break;
>     }
>  }
> @@ -1058,7 +1058,7 @@ ir_constant::copy_masked_offset(ir_constant *src, int offset, unsigned int mask)
>  	    value.b[i+offset] = src->get_bool_component(id++);
>  	    break;
>  	 default:
> -	    assert(!"Should not get here.");
> +	    unreachable("Should not get here.");
>  	    return;
>  	 }
>        }
> @@ -1118,7 +1118,7 @@ ir_constant::has_value(const ir_constant *c) const
>  	    return false;
>  	 break;
>        default:
> -	 assert(!"Should not get here.");
> +	 unreachable("Should not get here.");
>  	 return false;

Remove this return.

>        }
>     }
> @@ -1159,7 +1159,7 @@ ir_constant::is_value(float f, int i) const
>  	  * Samplers cannot be constants, and the others should have been
>  	  * filtered out above.
>  	  */
> -	 assert(!"Should not get here.");
> +	 unreachable("Should not get here.");
>  	 return false;

Remove this return.

>        }
>     }
> @@ -1576,7 +1576,7 @@ interpolation_string(unsigned interpolation)
>     case INTERP_QUALIFIER_NOPERSPECTIVE: return "noperspective";
>     }
>  
> -   assert(!"Should not get here.");
> +   unreachable("Should not get here.");
>     return "";

Remove this return.

>  }
>  
> @@ -1611,7 +1611,7 @@ ir_variable::enable_extension_warning(const char *extension)
>        }
>     }
>  
> -   assert(!"Should not get here.");
> +   unreachable("Should not get here.");
>     this->data.warn_extension_index = 0;

Remove this assignment.

>  }
>  
> @@ -1856,7 +1856,7 @@ vertices_per_prim(GLenum prim)
>     case GL_TRIANGLES_ADJACENCY:
>        return 6;
>     default:
> -      assert(!"Bad primitive");
> +      unreachable("Bad primitive");
>        return 3;

Remove this return.

>     }
>  }
> @@ -1900,6 +1900,6 @@ mode_string(const ir_variable *var)
>        break;
>     }
>  
> -   assert(!"Should not get here.");
> +   unreachable("Should not get here.");
>     return "invalid variable";

Remove this return.

>  }
> diff --git a/src/glsl/ir.h b/src/glsl/ir.h
> index a0f48b2..169a1c2 100644
> --- a/src/glsl/ir.h
> +++ b/src/glsl/ir.h
> @@ -190,7 +190,7 @@ protected:
>  private:
>     ir_instruction()
>     {
> -      assert(!"Should not get here.");
> +      unreachable("Should not get here.");
>     }
>  };
>  
> diff --git a/src/glsl/ir_clone.cpp b/src/glsl/ir_clone.cpp
> index dffa578..fc46cdd 100644
> --- a/src/glsl/ir_clone.cpp
> +++ b/src/glsl/ir_clone.cpp
> @@ -362,7 +362,7 @@ ir_constant::clone(void *mem_ctx, struct hash_table *ht) const
>     case GLSL_TYPE_VOID:
>     case GLSL_TYPE_ERROR:
>     case GLSL_TYPE_INTERFACE:
> -      assert(!"Should not get here.");
> +      unreachable("Should not get here.");
>        break;
>     }
>  
> diff --git a/src/glsl/ir_constant_expression.cpp b/src/glsl/ir_constant_expression.cpp
> index 1e8b3a3..89f306a 100644
> --- a/src/glsl/ir_constant_expression.cpp
> +++ b/src/glsl/ir_constant_expression.cpp
> @@ -473,7 +473,7 @@ constant_referenced(const ir_dereference *deref,
>     }
>  
>     default:
> -      assert(!"Should not get here.");
> +      unreachable("Should not get here.");
>        break;
>     }
>  
> @@ -1580,7 +1580,7 @@ ir_expression::constant_expression_value(struct hash_table *variable_context)
>  	 data.b[idx] = op[1]->value.b[0];
>  	 break;
>        default:
> -	 assert(!"Should not get here.");
> +	 unreachable("Should not get here.");
>  	 break;
>        }
>        break;
> @@ -1666,7 +1666,7 @@ ir_swizzle::constant_expression_value(struct hash_table *variable_context)
>  	 case GLSL_TYPE_INT:   data.u[i] = v->value.u[swiz_idx[i]]; break;
>  	 case GLSL_TYPE_FLOAT: data.f[i] = v->value.f[swiz_idx[i]]; break;
>  	 case GLSL_TYPE_BOOL:  data.b[i] = v->value.b[swiz_idx[i]]; break;
> -	 default:              assert(!"Should not get here."); break;
> +	 default:              unreachable("Should not get here."); break;
>  	 }
>        }
>  
> @@ -1741,7 +1741,7 @@ ir_dereference_array::constant_expression_value(struct hash_table *variable_cont
>  	    break;
>  
>  	 default:
> -	    assert(!"Should not get here.");
> +	    unreachable("Should not get here.");
>  	    break;
>  	 }
>  
> diff --git a/src/glsl/ir_equals.cpp b/src/glsl/ir_equals.cpp
> index 65376cd..cb51cdf 100644
> --- a/src/glsl/ir_equals.cpp
> +++ b/src/glsl/ir_equals.cpp
> @@ -172,7 +172,7 @@ ir_texture::equals(ir_instruction *ir, enum ir_node_type ignore)
>           return false;
>        break;
>     default:
> -      assert(!"Unrecognized texture op");
> +      unreachable("Unrecognized texture op");
>     }
>  
>     return true;
> diff --git a/src/glsl/ir_set_program_inouts.cpp b/src/glsl/ir_set_program_inouts.cpp
> index 97ead75..43506a8 100644
> --- a/src/glsl/ir_set_program_inouts.cpp
> +++ b/src/glsl/ir_set_program_inouts.cpp
> @@ -189,7 +189,7 @@ ir_set_program_inouts_visitor::try_mark_partial_variable(ir_variable *var,
>          (type->is_array() &&
>           (type->fields.array->is_numeric() ||
>            type->fields.array->is_boolean())))) {
> -      assert(!"Unexpected indexing in ir_set_program_inouts");
> +      unreachable("Unexpected indexing in ir_set_program_inouts");
>  

I think this should remain an assertion... unless we want to do a larger
revamp of this code.

>        /* For safety in release builds, in case we ever encounter unexpected
>         * indexing, give up and let the caller mark the whole variable as used.
> diff --git a/src/glsl/ir_validate.cpp b/src/glsl/ir_validate.cpp
> index 5a6f8bb..2f0de77 100644
> --- a/src/glsl/ir_validate.cpp
> +++ b/src/glsl/ir_validate.cpp
> @@ -621,7 +621,7 @@ ir_validate::visit_leave(ir_expression *ir)
>  	 /* The is_vector assertion above should prevent execution from ever
>  	  * getting here.
>  	  */
> -	 assert(!"Should not get here.");
> +	 unreachable("Should not get here.");
>  	 break;
>        }
>     }
> diff --git a/src/glsl/ir_visitor.h b/src/glsl/ir_visitor.h
> index 40f96ff..a1011fa 100644
> --- a/src/glsl/ir_visitor.h
> +++ b/src/glsl/ir_visitor.h
> @@ -45,7 +45,7 @@ public:
>      * the hierarchy should not have \c visit methods.
>      */
>     /*@{*/
> -   virtual void visit(class ir_rvalue *) { assert(!"unhandled error_type"); }
> +   virtual void visit(class ir_rvalue *) { unreachable("unhandled error_type"); }
>     virtual void visit(class ir_variable *) = 0;
>     virtual void visit(class ir_function_signature *) = 0;
>     virtual void visit(class ir_function *) = 0;
> diff --git a/src/glsl/link_interface_blocks.cpp b/src/glsl/link_interface_blocks.cpp
> index 0ce502d..99637f4 100644
> --- a/src/glsl/link_interface_blocks.cpp
> +++ b/src/glsl/link_interface_blocks.cpp
> @@ -284,7 +284,7 @@ validate_intrastage_interface_blocks(struct gl_shader_program *prog,
>              /* Only in, out, and uniform interfaces are legal, so we should
>               * never get here.
>               */
> -            assert(!"illegal interface type");
> +            unreachable("illegal interface type");
>              continue;
>           }
>  
> diff --git a/src/glsl/link_uniform_block_active_visitor.cpp b/src/glsl/link_uniform_block_active_visitor.cpp
> index 9da6a4b..5e25687 100644
> --- a/src/glsl/link_uniform_block_active_visitor.cpp
> +++ b/src/glsl/link_uniform_block_active_visitor.cpp
> @@ -68,7 +68,7 @@ process_block(void *mem_ctx, struct hash_table *ht, ir_variable *var)
>  	 return b;
>     }
>  
> -   assert(!"Should not get here.");
> +   unreachable("Should not get here.");
>     return NULL;

Remove this return.

>  }
>  
> diff --git a/src/glsl/link_uniform_blocks.cpp b/src/glsl/link_uniform_blocks.cpp
> index 536fcd4..03e1de4 100644
> --- a/src/glsl/link_uniform_blocks.cpp
> +++ b/src/glsl/link_uniform_blocks.cpp
> @@ -64,7 +64,7 @@ private:
>        (void) type;
>        (void) name;
>        (void) row_major;
> -      assert(!"Should not get here.");
> +      unreachable("Should not get here.");
>     }
>  
>     virtual void visit_field(const glsl_type *type, const char *name,
> diff --git a/src/glsl/link_uniform_initializers.cpp b/src/glsl/link_uniform_initializers.cpp
> index f6a60bc..431ad99 100644
> --- a/src/glsl/link_uniform_initializers.cpp
> +++ b/src/glsl/link_uniform_initializers.cpp
> @@ -88,7 +88,7 @@ copy_constant_to_storage(union gl_constant_value *storage,
>  	 /* All other types should have already been filtered by other
>  	  * paths in the caller.
>  	  */
> -	 assert(!"Should not get here.");
> +	 unreachable("Should not get here.");
>  	 break;
>        }
>     }
> @@ -301,7 +301,7 @@ link_set_uniform_initializers(struct gl_shader_program *prog,
>              } else if (type->contains_atomic()) {
>                 /* we don't actually need to do anything. */
>              } else {
> -               assert(!"Explicit binding not on a sampler, UBO or atomic.");
> +               unreachable("Explicit binding not on a sampler, UBO or atomic.");
>              }
>           } else if (var->constant_value) {
>              linker::set_uniform_initializer(mem_ctx, prog, var->name,
> diff --git a/src/glsl/link_uniforms.cpp b/src/glsl/link_uniforms.cpp
> index de2f6c9..6d716d5 100644
> --- a/src/glsl/link_uniforms.cpp
> +++ b/src/glsl/link_uniforms.cpp
> @@ -523,7 +523,7 @@ private:
>        (void) type;
>        (void) name;
>        (void) row_major;
> -      assert(!"Should not get here.");
> +      unreachable("Should not get here.");
>     }
>  
>     virtual void visit_field(const glsl_type *type, const char *name,
> diff --git a/src/glsl/link_varyings.cpp b/src/glsl/link_varyings.cpp
> index 43da2c6..539a1d1 100644
> --- a/src/glsl/link_varyings.cpp
> +++ b/src/glsl/link_varyings.cpp
> @@ -993,7 +993,7 @@ varying_matches::compute_packing_order(const ir_variable *var)
>     case 3: return PACKING_ORDER_VEC3;
>     case 0: return PACKING_ORDER_VEC4;
>     default:
> -      assert(!"Unexpected value of vector_elements");
> +      unreachable("Unexpected value of vector_elements");
>        return PACKING_ORDER_VEC4;

Remove this return.

>     }
>  }
> @@ -1336,7 +1336,7 @@ assign_varying_locations(struct gl_context *ctx,
>                                                  consumer_inputs,
>                                                  consumer_interface_inputs,
>                                                  consumer_inputs_with_locations)) {
> -      assert(!"populate_consumer_input_sets failed");
> +      unreachable("populate_consumer_input_sets failed");

I think this should either remain an assertion, or we should remove all
of the code following it.

>        hash_table_dtor(tfeedback_candidates);
>        hash_table_dtor(consumer_inputs);
>        hash_table_dtor(consumer_interface_inputs);
> diff --git a/src/glsl/loop_analysis.cpp b/src/glsl/loop_analysis.cpp
> index 21d46eb..741e804 100644
> --- a/src/glsl/loop_analysis.cpp
> +++ b/src/glsl/loop_analysis.cpp
> @@ -425,7 +425,7 @@ loop_analysis::visit_leave(ir_loop *ir)
>  	    case ir_binop_greater: cmp = ir_binop_less;    break;
>  	    case ir_binop_lequal:  cmp = ir_binop_gequal;  break;
>  	    case ir_binop_gequal:  cmp = ir_binop_lequal;  break;
> -	    default: assert(!"Should not get here.");
> +	    default: unreachable("Should not get here.");
>  	    }
>  	 }
>  
> diff --git a/src/glsl/loop_controls.cpp b/src/glsl/loop_controls.cpp
> index 1c1d34f..70f97ba 100644
> --- a/src/glsl/loop_controls.cpp
> +++ b/src/glsl/loop_controls.cpp
> @@ -59,7 +59,7 @@ find_initial_value(ir_loop *loop, ir_variable *var)
>  
>        case ir_type_function:
>        case ir_type_function_signature:
> -	 assert(!"Should not get here.");
> +	 unreachable("Should not get here.");
>  	 return NULL;

Remove this return.

>  
>        case ir_type_assignment: {
> diff --git a/src/glsl/lower_packed_varyings.cpp b/src/glsl/lower_packed_varyings.cpp
> index 5e844c7..85a0c49 100644
> --- a/src/glsl/lower_packed_varyings.cpp
> +++ b/src/glsl/lower_packed_varyings.cpp
> @@ -301,7 +301,7 @@ lower_packed_varyings_visitor::bitwise_assign_pack(ir_rvalue *lhs,
>              ir_expression(ir_unop_bitcast_f2i, lhs->type, rhs);
>           break;
>        default:
> -         assert(!"Unexpected type conversion while lowering varyings");
> +         unreachable("Unexpected type conversion while lowering varyings");
>           break;
>        }
>     }
> @@ -335,7 +335,7 @@ lower_packed_varyings_visitor::bitwise_assign_unpack(ir_rvalue *lhs,
>              ir_expression(ir_unop_bitcast_i2f, lhs->type, rhs);
>           break;
>        default:
> -         assert(!"Unexpected type conversion while lowering varyings");
> +         unreachable("Unexpected type conversion while lowering varyings");
>           break;
>        }
>     }
> diff --git a/src/glsl/lower_packing_builtins.cpp b/src/glsl/lower_packing_builtins.cpp
> index db73c7b..d4da769 100644
> --- a/src/glsl/lower_packing_builtins.cpp
> +++ b/src/glsl/lower_packing_builtins.cpp
> @@ -118,7 +118,7 @@ public:
>           *rvalue = split_unpack_half_2x16(op0);
>           break;
>        case LOWER_PACK_UNPACK_NONE:
> -         assert(!"not reached");
> +         unreachable("not reached");
>           break;
>        }
>  
> diff --git a/src/glsl/lower_ubo_reference.cpp b/src/glsl/lower_ubo_reference.cpp
> index 43dd067..e3f2e96 100644
> --- a/src/glsl/lower_ubo_reference.cpp
> +++ b/src/glsl/lower_ubo_reference.cpp
> @@ -207,12 +207,12 @@ interface_field_name(void *mem_ctx, char *base_name, ir_dereference *d,
>        }
>  
>        default:
> -         assert(!"Should not get here.");
> +         unreachable("Should not get here.");
>           break;
>        }
>     }
>  
> -   assert(!"Should not get here.");
> +   unreachable("Should not get here.");
>     return NULL;

Remove this return.

>  }
>  
> @@ -383,7 +383,7 @@ lower_ubo_reference_visitor::handle_rvalue(ir_rvalue **rvalue)
>  	 break;
>        }
>        default:
> -	 assert(!"not reached");
> +	 unreachable("not reached");
>  	 deref = NULL;

Remove this assignment.

>  	 break;
>        }
> diff --git a/src/glsl/lower_variable_index_to_cond_assign.cpp b/src/glsl/lower_variable_index_to_cond_assign.cpp
> index d878cb0..e68d139 100644
> --- a/src/glsl/lower_variable_index_to_cond_assign.cpp
> +++ b/src/glsl/lower_variable_index_to_cond_assign.cpp
> @@ -384,7 +384,7 @@ public:
>  	 return this->lower_temps;
>        }
>  
> -      assert(!"Should not get here.");
> +      unreachable("Should not get here.");
>        return false;

Remove this return.

>     }
>  
> diff --git a/src/glsl/lower_vector.cpp b/src/glsl/lower_vector.cpp
> index a658410..3a89b80 100644
> --- a/src/glsl/lower_vector.cpp
> +++ b/src/glsl/lower_vector.cpp
> @@ -173,7 +173,7 @@ lower_vector_visitor::handle_rvalue(ir_rvalue **rvalue)
>        case GLSL_TYPE_INT:   d.i[assigned] = c->value.i[0]; break;
>        case GLSL_TYPE_FLOAT: d.f[assigned] = c->value.f[0]; break;
>        case GLSL_TYPE_BOOL:  d.b[assigned] = c->value.b[0]; break;
> -      default:              assert(!"Should not get here."); break;
> +      default:              unreachable("Should not get here."); break;
>        }
>  
>        write_mask |= (1U << i);
> diff --git a/src/glsl/opt_constant_propagation.cpp b/src/glsl/opt_constant_propagation.cpp
> index c334e12..7f12a13 100644
> --- a/src/glsl/opt_constant_propagation.cpp
> +++ b/src/glsl/opt_constant_propagation.cpp
> @@ -166,7 +166,7 @@ ir_constant_propagation_visitor::handle_rvalue(ir_rvalue **rvalue)
>  	 case 1: channel = swiz->mask.y; break;
>  	 case 2: channel = swiz->mask.z; break;
>  	 case 3: channel = swiz->mask.w; break;
> -	 default: assert(!"shouldn't be reached"); channel = 0; break;
> +	 default: unreachable("shouldn't be reached"); channel = 0; break;
>  	 }
>        } else {
>  	 channel = i;
> @@ -204,7 +204,7 @@ ir_constant_propagation_visitor::handle_rvalue(ir_rvalue **rvalue)
>  	 data.b[i] = found->constant->value.b[rhs_channel];
>  	 break;
>        default:
> -	 assert(!"not reached");
> +	 unreachable("not reached");
>  	 break;
>        }
>     }
> diff --git a/src/glsl/opt_minmax.cpp b/src/glsl/opt_minmax.cpp
> index 32fb2d7..4a758a6 100644
> --- a/src/glsl/opt_minmax.cpp
> +++ b/src/glsl/opt_minmax.cpp
> @@ -179,7 +179,7 @@ combine_constant(bool ismin, ir_constant *a, ir_constant *b)
>              c->value.f[i] = b->value.f[i];
>           break;
>        default:
> -         assert(!"not reached");
> +         unreachable("not reached");
>        }
>     }
>     return c;
> 



More information about the mesa-dev mailing list