-
Notifications
You must be signed in to change notification settings - Fork 14.3k
[libc] Update assert for C23 #137402
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[libc] Update assert for C23 #137402
Conversation
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 llvm#136184
@llvm/pr-subscribers-libc Author: Michael Jones (michaelrj-google) ChangesPreviously the assert macro took one argument named "e", but this led to Fixes #136184 Full diff: https://github.com/llvm/llvm-project/pull/137402.diff 1 Files Affected:
diff --git a/libc/include/assert.h.def b/libc/include/assert.h.def
index d5ae14a1cd810..2c27712251b17 100644
--- a/libc/include/assert.h.def
+++ b/libc/include/assert.h.def
@@ -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()
|
Thanks for merging this for me! |
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 llvm#136184
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 llvm#136184
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 llvm#136184
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 llvm#136184
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 llvm#136184
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 arehandled properly. This patch doesn't introduce the enforcement function
mentioned in the standard update, though that may be done in a followup.
Fixes #136184