[PATCH] Fix assert() warning in gcc < 4.8 [BZ# 21242]
Joseph Myers
joseph@codesourcery.com
Mon Jun 26 10:56:00 GMT 2017
On Sun, 25 Jun 2017, Florian Weimer wrote:
> I think we can use __extension__ if we also expand the expression
> without __extension__ in an unevaluated context. The tricky part is to
> find one that is independent of GNU extensions.
> Perhaps this would work?
>
> # define assert(expr) \
> ((void) sizeof ((expr) == 0), __extension__ ({ \
> if (expr) \
> ; /* empty */ \
> else \
> __assert_fail (#expr, __FILE__, __LINE__, __FUNCTION__); \
> }))
>
> sizeof suppresses the evaluation of the first occurrence of expr. The
> comparison is needed because sizeof cannot be applied to function
> pointers and bitfields. C11 says that expr is compared to zero, so the
> (expr) == 0 expression is well-formed.
>
> What do you think? Should we make this change?
I think that's reasonable (appropriately commented to explain why it's
done that way).
--
Joseph S. Myers
joseph@codesourcery.com
More information about the Libc-alpha
mailing list