On Mon, Jun 29, 2015 at 12:50 PM, Jens Axboe <axboe@xxxxxxxxx> wrote: > On 06/29/2015 11:42 AM, Alireza Haghdoost wrote: >> >> Jens, >> >> Sounds like the compiletime_assert() method was not function and is >> relying on the optimizer performing dead code elimination to remove >> the call to prefix ## suffix >> >> How about this solution: I guess we have to work around it to make it >> more portable since it works with C11. >> >> diff --git a/fio-arh/compiler/compiler.h b/fio-arh/compiler/compiler.h >> index 40e857c..7c9ba57 100644 >> --- a/fio-arh/compiler/compiler.h >> +++ b/fio-arh/compiler/compiler.h >> @@ -33,26 +33,6 @@ >> 1; \ >> }) >> >> -#ifndef __compiletime_error >> -#define __compiletime_error(message) >> -#endif >> -#ifndef __compiletime_error_fallback >> -#define __compiletime_error_fallback(condition) do { } while (0) >> -#endif >> - >> -#define __compiletime_assert(condition, msg, prefix, suffix) \ >> - do { \ >> - int __cond = !(condition); \ >> - extern void prefix ## suffix(void) __compiletime_error(msg); \ >> - if (__cond) \ >> - prefix ## suffix(); \ >> - __compiletime_error_fallback(__cond); \ >> - } while (0) >> - >> -#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__) >> +#define compiletime_assert(condition, msg) _Static_assert(condition, msg) >> >> #endif > > > But now it's more compiler dependent, which is worse than before. At least > it only broke if people fiddled with the optimizations before, otherwise it > was fine. > > Add a configure test for this, use _Static_assert() if it's available, the > old method if not. Here you are: diff --git a/fio-arh/compiler/compiler.h b/fio-arh/compiler/compiler.h index 40e857c..93fdc56 100644 --- a/fio-arh/compiler/compiler.h +++ b/fio-arh/compiler/compiler.h @@ -1,5 +1,6 @@ #ifndef FIO_COMPILER_H #define FIO_COMPILER_H +#include <assert.h> #if __GNUC__ >= 4 #include "compiler-gcc4.h" @@ -33,6 +34,12 @@ 1; \ }) + +#if (__STDC_VERSION__ >= 201112L) +#define compiletime_assert(condition, msg) _Static_assert(condition, msg) +#else + + #ifndef __compiletime_error #define __compiletime_error(message) #endif @@ -55,4 +62,7 @@ #define compiletime_assert(condition, msg) \ _compiletime_assert(condition, msg, __compiletime_assert_, __LINE__) + +#endif + #endif -- To unsubscribe from this list: send the line "unsubscribe fio" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html