@@ -124,8 +124,8 @@ class invariant_failedt: public std::logic_error
124
124
// This is *not* recommended as it can result in unpredictable behaviour
125
125
// including silently reporting incorrect results.
126
126
// This is also useful for checking side-effect freedom.
127
- #define INVARIANT (CONDITION, REASON ) do {} while (0 )
128
- #define INVARIANT_STRUCTURED (CONDITION, TYPENAME, ...) do {} while (0 )
127
+ #define INVARIANT (CONDITION, REASON ) do {} while (false )
128
+ #define INVARIANT_STRUCTURED (CONDITION, TYPENAME, ...) do {} while (false )
129
129
130
130
#elif defined(CPROVER_INVARIANT_ASSERT)
131
131
// Not recommended but provided for backwards compatability
@@ -202,19 +202,21 @@ inline void invariant_violated_string(
202
202
#define __this_function__ __func__
203
203
#endif
204
204
205
- #define INVARIANT (CONDITION, REASON ) \
206
- do /* NOLINT */ \
207
- { \
208
- if (!(CONDITION)) \
209
- invariant_violated_string (__FILE__, __this_function__, __LINE__, (REASON)); /* NOLINT */ \
210
- } while (0 )
205
+ #define INVARIANT (CONDITION, REASON ) \
206
+ do /* NOLINT */ \
207
+ { \
208
+ if (!(CONDITION)) \
209
+ invariant_violated_string ( \
210
+ __FILE__, __this_function__, __LINE__, (REASON)); /* NOLINT */ \
211
+ } while (false )
211
212
212
- #define INVARIANT_STRUCTURED (CONDITION, TYPENAME, ...) \
213
- do /* NOLINT */ \
214
- { \
215
- if (!(CONDITION)) \
216
- invariant_violated_structured<TYPENAME>(__FILE__, __this_function__, __LINE__, __VA_ARGS__); /* NOLINT */ \
217
- } while (0 )
213
+ #define INVARIANT_STRUCTURED (CONDITION, TYPENAME, ...) \
214
+ do /* NOLINT */ \
215
+ { \
216
+ if (!(CONDITION)) \
217
+ invariant_violated_structured<TYPENAME>( \
218
+ __FILE__, __this_function__, __LINE__, __VA_ARGS__); /* NOLINT */ \
219
+ } while (false )
218
220
219
221
#endif // End CPROVER_DO_NOT_CHECK / CPROVER_ASSERT / ... if block
220
222
@@ -260,8 +262,8 @@ inline void invariant_violated_string(
260
262
261
263
// The following should not be used in new code and are only intended
262
264
// to migrate documentation and "error handling" in older code
263
- #define TODO INVARIANT (0 , " Todo" )
264
- #define UNIMPLEMENTED INVARIANT (0 , " Unimplemented" )
265
- #define UNHANDLED_CASE INVARIANT (0 , " Unhandled case" )
265
+ #define TODO INVARIANT (false , " Todo" )
266
+ #define UNIMPLEMENTED INVARIANT (false , " Unimplemented" )
267
+ #define UNHANDLED_CASE INVARIANT (false , " Unhandled case" )
266
268
267
269
#endif // CPROVER_UTIL_INVARIANT_H
0 commit comments