On Fri, Sep 20, 2013 at 7:52 PM, Eric Anholt <e...@anholt.net> wrote: > Noticed while grepping through the code for something else. > --- > src/mesa/program/program.c | 36 ++++++++++++++++++++++-------------- > 1 file changed, 22 insertions(+), 14 deletions(-) > > diff --git a/src/mesa/program/program.c b/src/mesa/program/program.c > index 2529c13..5dd68d9 100644 > --- a/src/mesa/program/program.c > +++ b/src/mesa/program/program.c > @@ -55,27 +55,35 @@ _mesa_init_program(struct gl_context *ctx) > * If this assertion fails, we need to increase the field > * size for register indexes (see INST_INDEX_BITS). > */ > - ASSERT(ctx->Const.VertexProgram.MaxUniformComponents / 4 > + STATIC_ASSERT(ctx->Const.VertexProgram.MaxUniformComponents / 4 > <= (1 << INST_INDEX_BITS)); > - ASSERT(ctx->Const.FragmentProgram.MaxUniformComponents / 4 > + STATIC_ASSERT(ctx->Const.FragmentProgram.MaxUniformComponents / 4 > <= (1 << INST_INDEX_BITS)); > > - ASSERT(ctx->Const.VertexProgram.MaxTemps <= (1 << INST_INDEX_BITS)); > - ASSERT(ctx->Const.VertexProgram.MaxLocalParams <= (1 << INST_INDEX_BITS)); > - ASSERT(ctx->Const.FragmentProgram.MaxTemps <= (1 << INST_INDEX_BITS)); > - ASSERT(ctx->Const.FragmentProgram.MaxLocalParams <= (1 << > INST_INDEX_BITS)); > - > - ASSERT(ctx->Const.VertexProgram.MaxUniformComponents <= 4 * MAX_UNIFORMS); > - ASSERT(ctx->Const.FragmentProgram.MaxUniformComponents <= 4 * > MAX_UNIFORMS); > - > - ASSERT(ctx->Const.VertexProgram.MaxAddressOffset <= (1 << > INST_INDEX_BITS)); > - ASSERT(ctx->Const.FragmentProgram.MaxAddressOffset <= (1 << > INST_INDEX_BITS)); > + STATIC_ASSERT(ctx->Const.VertexProgram.MaxTemps <= > + (1 << INST_INDEX_BITS)); > + STATIC_ASSERT(ctx->Const.VertexProgram.MaxLocalParams <= > + (1 << INST_INDEX_BITS)); > + STATIC_ASSERT(ctx->Const.FragmentProgram.MaxTemps <= > + (1 << INST_INDEX_BITS)); > + STATIC_ASSERT(ctx->Const.FragmentProgram.MaxLocalParams <= > + (1 << INST_INDEX_BITS)); > + > + STATIC_ASSERT(ctx->Const.VertexProgram.MaxUniformComponents <= > + 4 * MAX_UNIFORMS); > + STATIC_ASSERT(ctx->Const.FragmentProgram.MaxUniformComponents <= > + 4 * MAX_UNIFORMS); > + > + STATIC_ASSERT(ctx->Const.VertexProgram.MaxAddressOffset <= > + (1 << INST_INDEX_BITS)); > + STATIC_ASSERT(ctx->Const.FragmentProgram.MaxAddressOffset <= > + (1 << INST_INDEX_BITS));
Are you sure about those? How does the compiler know the values of ctx->Const.Foo at compile time? It's worrisome that our STATIC_ASSERT macro is silent at compile time when the expression isn't a compile-time constant. The problem with our macro now is variable-sized arrays are OK at compile time. I think a macro based on bitfield width might be better: #define STATIC_ASSERT(COND) \ do { \ struct dummy { \ int static_assert_failed:(!!(COND)); \ }; \ } while (0) -Brian _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev