[Mesa-dev] [PATCH 4/7] mesa: Convert some runtime asserts to static asserts.
Dave Airlie
airlied at gmail.com
Sun Sep 22 13:53:53 PDT 2013
On Sun, Sep 22, 2013 at 12:57 AM, Brian Paul <brian.e.paul at gmail.com> wrote:
> On Fri, Sep 20, 2013 at 7:52 PM, Eric Anholt <eric at 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.
just as an aside the current S_A macro produces a warning on later gcc's.
kinda a misfeature.
Dave.
More information about the mesa-dev
mailing list