assert: Suppress pedantic warning caused by statement expression [BZ #21242]

(cherry picked from commit 8b2c63e4e2)
This commit is contained in:
Florian Weimer 2017-08-11 16:02:55 +02:00
parent 5b3f978ccf
commit f827b1cec3
3 changed files with 17 additions and 3 deletions

View File

@ -1,3 +1,10 @@
2017-08-11 Florian Weimer <fweimer@redhat.com>
[BZ #21242]
* assert/assert.h [__GNUC__ && !__STRICT_ANSI__] (assert):
Suppress pedantic warning resulting from statement expression.
(__ASSERT_FUNCTION): Add missing __extension__.
2017-08-08 Helge Deller <deller@gmx.de>
[BZ #21049]

1
NEWS
View File

@ -14,6 +14,7 @@ The following bugs are resolved with this release:
[21109] Tunables broken on big-endian
[21115] sunrpc: Use-after-free in error path in clntudp_call
[21209] Ignore and remove LD_HWCAP_MASK for AT_SECURE programs
[21242] assert: Suppress pedantic warning caused by statement expression
[21289] Fix symbol redirect for fts_set
[21386] Assertion in fork for distinct parent PID is incorrect
[21624] Unsafe alloca allows local attackers to alias stack and heap (CVE-2017-1000366)

View File

@ -91,13 +91,19 @@ __END_DECLS
? __ASSERT_VOID_CAST (0) \
: __assert_fail (#expr, __FILE__, __LINE__, __ASSERT_FUNCTION))
# else
/* The first occurrence of EXPR is not evaluated due to the sizeof,
but will trigger any pedantic warnings masked by the __extension__
for the second occurrence. The explicit comparison against zero is
required to support function pointers and bit fields in this
context, and to suppress the evaluation of variable length
arrays. */
# define assert(expr) \
({ \
((void) sizeof ((expr) == 0), __extension__ ({ \
if (expr) \
; /* empty */ \
else \
__assert_fail (#expr, __FILE__, __LINE__, __ASSERT_FUNCTION); \
})
}))
# endif
# ifdef __USE_GNU
@ -113,7 +119,7 @@ __END_DECLS
C9x has a similar variable called __func__, but prefer the GCC one since
it demangles C++ function names. */
# if defined __cplusplus ? __GNUC_PREREQ (2, 6) : __GNUC_PREREQ (2, 4)
# define __ASSERT_FUNCTION __PRETTY_FUNCTION__
# define __ASSERT_FUNCTION __extension__ __PRETTY_FUNCTION__
# else
# if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L
# define __ASSERT_FUNCTION __func__