GNU C Library master sources branch master updated. glibc-2.24-491-ge077349

meyering@sourceware.org meyering@sourceware.org
Sun Dec 18 09:33:00 GMT 2016


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  e077349ce589466eecd47213db4fae6b80ec18c4 (commit)
      from  009ba649b4999ea269de8d0b301e659f075df495 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=e077349ce589466eecd47213db4fae6b80ec18c4

commit e077349ce589466eecd47213db4fae6b80ec18c4
Author: Jim Meyering <meyering@fb.com>
Date:   Thu Jun 5 10:42:05 2014 -0700

    assert.h: allow gcc to detect assert(a = 1) errors
    
    * assert/assert.h (assert): Rewrite assert's definition so that
    a s/==/=/ typo, e.g., assert(errno = ENOENT) is not hidden from
    gcc's -Wparentheses by assert-added parentheses.  The new definition
    uses "if (expr) /* empty */; else __assert_fail...", so
    gcc -Wall will now detect that type of error in an assert, too.
    The __STRICT_ANSI__ disjunct is to make this work also with both
    -ansi and  -pedantic, which would reject the use of ({...}).
    I would have preferred to use __extension__ to mark that, but
    doing so would mistakenly suppress warnings about any extension
    in the user-supplied "expr".
    E.g., "assert ( ({1;}) )" must continue to evoke a warning.

diff --git a/ChangeLog b/ChangeLog
index 452210e..5e49f6b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2016-11-25  Jim Meyering  <meyering@fb.com>
+
+	Let gcc detect assert(a = 1) errors.
+	* assert/assert.h (assert) Rewrite, retaining the old definintion
+	when required, but otherwise putting the expression as-is in an "if"
+	expression (hence, with no added parentheses) within a statement
+	expression.
+
 2016-12-17  Siddhesh Poyarekar  <siddhesh@sourceware.org>

 	* benchtests/Makefile (binaries-benchset): Depend on libsupport
diff --git a/assert/assert.h b/assert/assert.h
index 729edeb..0f25131 100644
--- a/assert/assert.h
+++ b/assert/assert.h
@@ -82,10 +82,23 @@ extern void __assert (const char *__assertion, const char *__file, int __line)

 __END_DECLS

-# define assert(expr)							\
-  ((expr)								\
-   ? __ASSERT_VOID_CAST (0)						\
-   : __assert_fail (#expr, __FILE__, __LINE__, __ASSERT_FUNCTION))
+/* When possible, define assert so that it does not add extra
+   parentheses around EXPR.  Otherwise, those added parentheses would
+   suppress warnings we'd expect to be detected by gcc's -Wparentheses.  */
+# if !defined __GNUC__ || defined __STRICT_ANSI__
+#  define assert(expr)							\
+    ((expr)								\
+     ? __ASSERT_VOID_CAST (0)						\
+     : __assert_fail (#expr, __FILE__, __LINE__, __ASSERT_FUNCTION))
+# else
+#  define assert(expr)							\
+    ({									\
+      if (expr)								\
+        ; /* empty */							\
+      else								\
+        __assert_fail (#expr, __FILE__, __LINE__, __ASSERT_FUNCTION);	\
+    })
+# endif

 # ifdef	__USE_GNU
 #  define assert_perror(errnum)						\

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog       |    8 ++++++++
 assert/assert.h |   21 +++++++++++++++++----
 2 files changed, 25 insertions(+), 4 deletions(-)


hooks/post-receive
-- 
GNU C Library master sources



More information about the Glibc-cvs mailing list