]> Savannah Git Hosting - gnulib.git/commitdiff
assure: new macro ‘affirm’
authorPaul Eggert <eggert@cs.ucla.edu>
Sun, 24 May 2020 02:06:16 +0000 (19:06 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Sun, 24 May 2020 02:12:34 +0000 (19:12 -0700)
* lib/assure.h: Include verify.h.
(affirm): New macro, after a suggestion by Marc Nieper-Wißkirchen in:
https://lists.gnu.org/r/bug-gnulib/2020-05/msg00263.html
and commentary by Bruno Haible in:
https://lists.gnu.org/r/bug-gnulib/2020-05/msg00278.html
* modules/assure (Depends-on:): Add verify.

ChangeLog
lib/assure.h
modules/assure

index a7101db80fbabdfa2ce6e897e2fcfb8180680bd3..c05ef910dc9ced74790fad32158c41a8d2a4a8a2 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2020-05-23  Paul Eggert  <eggert@cs.ucla.edu>
+
+       assure: new macro ‘affirm’
+       * lib/assure.h: Include verify.h.
+       (affirm): New macro, after a suggestion by Marc Nieper-Wißkirchen in:
+       https://lists.gnu.org/r/bug-gnulib/2020-05/msg00263.html
+       and commentary by Bruno Haible in:
+       https://lists.gnu.org/r/bug-gnulib/2020-05/msg00278.html
+       * modules/assure (Depends-on:): Add verify.
+
 2020-05-23  Bruno Haible  <bruno@clisp.org>
 
        calloc-gnu: Make test work in non-flat address spaces.
index 8ea2f6e480b6afe66543ca9d70963bf55c8c71f0..09a4edfa592c62f7f282c00d4dbf78c74cfa76db 100644 (file)
 #define _GL_ASSURE_H
 
 #include <assert.h>
+#include "verify.h"
+
+/* Evaluate an assertion E that is guaranteed to be true.
+   If NDEBUG is not defined, abort the program if E is false.
+   If NDEBUG is defined, the compiler can assume E and behavior is
+   undefined if E is false, fails to evaluate, or has side effects.
+
+   Unlike standard 'assert', this macro evaluates E even when NDEBUG
+   is defined, so as to catch typos, avoid some GCC warnings, and
+   improve performance when E is simple enough.
+
+   Also see the documentation for 'assume' in verify.h.  */
+
+#ifdef NDEBUG
+# define affirm(E) assume (E)
+#else
+# define affirm(E) assert (E)
+#endif
 
 /* Check E's value at runtime, and report an error and abort if not.
    However, do nothing if NDEBUG is defined.
 
-   Unlike standard 'assert', this macro always compiles E even when NDEBUG
-   is defined, so as to catch typos and avoid some GCC warnings.  */
+   Unlike standard 'assert', this macro compiles E even when NDEBUG
+   is defined, so as to catch typos and avoid some GCC warnings.
+   Unlike 'affirm', it is OK for E to use hard-to-optimize features,
+   since E is not executed if NDEBUG is defined.  */
 
 #ifdef NDEBUG
 # define assure(E) ((void) (0 && (E)))
index 3cfe1f874eb3f31eb8cff22e85bf97785101969e..c37191717c83c2219178050e092f8011a52378da 100644 (file)
@@ -5,6 +5,7 @@ Files:
 lib/assure.h
 
 Depends-on:
+verify
 
 configure.ac: