@@ -124,8 +124,8 @@ class invariant_failedt: public std::logic_error
124124// This is *not* recommended as it can result in unpredictable behaviour
125125// including silently reporting incorrect results.
126126// 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 )
129129
130130#elif defined(CPROVER_INVARIANT_ASSERT)
131131// Not recommended but provided for backwards compatability
@@ -202,19 +202,21 @@ inline void invariant_violated_string(
202202#define __this_function__ __func__
203203#endif
204204
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 )
211212
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 )
218220
219221#endif // End CPROVER_DO_NOT_CHECK / CPROVER_ASSERT / ... if block
220222
@@ -260,8 +262,8 @@ inline void invariant_violated_string(
260262
261263// The following should not be used in new code and are only intended
262264// 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" )
266268
267269#endif // CPROVER_UTIL_INVARIANT_H
0 commit comments