[libc] Update assert for C23 (#137402)

Previously the assert macro took one argument named "e", but this led to
possible errors if the caller had commas in their input. C23 changed the
definition of assert to use `__VA_ARGS__` to ensure comma cases are
handled properly. This patch doesn't introduce the enforcement function
mentioned in the standard update, though that may be done in a followup.

Fixes #136184
This commit is contained in:
Michael Jones 2025-04-28 12:06:52 -07:00 committed by GitHub
parent abec9ff47d
commit 9124e963a3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -19,14 +19,14 @@
#undef assert
#ifdef NDEBUG
#define assert(e) (void)0
#define assert(...) ((void)0)
#else
#ifdef __cplusplus
extern "C"
#endif
_Noreturn void __assert_fail(const char *, const char *, unsigned, const char *) __NOEXCEPT;
#define assert(e) \
((e) ? (void)0 : __assert_fail(#e, __FILE__, __LINE__, __PRETTY_FUNCTION__))
#define assert(...) \
((__VA_ARGS__) ? ((void)0) : __assert_fail(#__VA_ARGS__, __FILE__, __LINE__, __PRETTY_FUNCTION__))
#endif
%%public_api()