On Mon, Nov 28, 2011 at 7:06 PM, Eric Anholt <e...@anholt.net> wrote: > On Mon, 28 Nov 2011 18:15:27 -0700, Brian Paul <bri...@vmware.com> wrote: >> This can be used to check that tables have the right number of entries, >> etc. at compile-time. This will hopefully catch things that are missed >> if particular drivers aren't tested, for example. > > I've always wanted to go dig up one of these and start using it. Thanks! > >> --- >> src/mesa/main/compiler.h | 11 +++++++++++ >> 1 files changed, 11 insertions(+), 0 deletions(-) >> >> diff --git a/src/mesa/main/compiler.h b/src/mesa/main/compiler.h >> index 921e302..96e24e4 100644 >> --- a/src/mesa/main/compiler.h >> +++ b/src/mesa/main/compiler.h >> @@ -310,6 +310,17 @@ static INLINE GLuint CPU_TO_LE32(GLuint x) >> #endif >> #endif >> >> + >> +/** >> + * Static (compile-time) assertion. >> + * Basically, use COND to dimension an array. If COND is false/zero the >> + * array size will be -1 and we'll get a compilation error. >> + */ >> +#define JOIN(x, y) x##y >> +#define STATIC_ASSERT_LINE(COND, LINE) do { typedef int >> JOIN(static_assertion_failed_at_line_,LINE)[(!!(COND))*2-1]; } while (0) >> +#define STATIC_ASSERT(COND) STATIC_ASSERT_LINE(COND, __LINE__) > > Looks like STATIC_ASSERT_LINE could get linewrapped, right?
Yeah, and I'm going to simplify this in general. There's really no need for the line number stuff since the compiler will already emit that and since the typedef is inside a do/while block we don't need to have a unique array name for every instance. I'll post a new patch. -Brian _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev