61 #define __LB(l, ...) l
62 #define __RB(l, ...) __VA_ARGS__
63 #define __emitmsg_fp stderr
70 #define __atomic_emitmsg(...) \
72 if (ftrylockfile(__emitmsg_fp) == 0) { \
73 fprintf (__emitmsg_fp, __VA_ARGS__); \
74 funlockfile(__emitmsg_fp); \
79 # define __terminate(retval) abort()
80 # define __emitmsg(...) __atomic_emitmsg (__VA_ARGS__)
82 # define __terminate(retval) return retval
83 # ifdef ASSUME_VERBOSE
84 # define __emitmsg(...) __atomic_emitmsg (__VA_ARGS__)
86 # define __emitmsg(...) while(0)
90 #define __assume(expr, exprstr, retval, ...) \
93 int OSCAP_CONCAT(__cont, __LINE__) = 1; \
94 __emitmsg ("%s:%d (%s): Assumption `%s' not fulfilled!\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, exprstr); \
95 do {__LB(__VA_ARGS__)} while((OSCAP_CONCAT(__cont, __LINE__) = 0)); \
96 if (OSCAP_CONCAT(__cont, __LINE__) == 0) __terminate(retval); \
98 do {__RB(__VA_ARGS__)} while(0); \
102 #if defined(__GNUC__)
103 # define assume(expr, retval, ...) __assume(__builtin_expect(expr, 1), #expr, retval, __VA_ARGS__)
105 # define assume(expr, retval, ...) __assume(expr, #expr, retval, __VA_ARGS__)
111 #define assume_r(...) assume(__VA_ARGS__)
117 # define assume_d(...) assume(__VA_ARGS__)
119 # define assume_d(...) while(0)
126 # define assume_ex(expr, retval, ...) assume(expr, retval, __VA_ARGS__)
128 # define assume_ex(expr, retval, ...) expr