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.
-- Jens Axboe -- 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