Messages in this thread | | | Date | Fri, 16 Nov 2012 17:25:09 -0600 | From | Daniel Santos <> | Subject | Re: [PATCH v5 9/9] bug.h, compiler.h: Introduce compiletime_assert & BUILD_BUG_ON_MSG |
| |
On 11/13/2012 04:13 PM, danielfsantos@att.net wrote: > +#define __compiletime_assert(condition, msg, __func) \ > + do { \ > + bool __cond = !(condition); \ > + extern void __func(void) __compiletime_error(msg); \ > + if (__cond) \ > + __func(); \ > + __compiletime_error_fallback(__cond); \ > + } while (0) > + > +#define _compiletime_assert(condition, msg, __func) \ > + __compiletime_assert(condition, msg, __func) > + > +/** > + * compiletime_assert - break build and emit msg if condition is false > + * @condition: a compile-time constant condition to check > + * @msg: a message to emit if condition is false > + * > + * In tradition of POSIX assert, this macro will break the build if the > + * supplied condition is *false*, emitting the supplied error message if the > + * compiler has support to do so. > + */ > +#define compiletime_assert(condition, msg) \ > + _compiletime_assert(condition, msg, __compiletime_assert_ ## __LINE__) > +
Whoops, this implementation pastes the tokens before allowing them to expand, it should be something like this:
#define __compiletime_assert(condition, msg, __func) .... stuff #define _compiletime_assert(condition, msg, prefix, suffix) \ __compiletime_assert(condition, msg, prefix ## suffix) #define compiletime_assert(condition, msg) \ _compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)
I'll fix that as well.
Daniel
| |