diff options
author | Tavian Barnes <tavianator@tavianator.com> | 2025-03-04 13:05:16 -0500 |
---|---|---|
committer | Tavian Barnes <tavianator@tavianator.com> | 2025-03-04 13:35:07 -0500 |
commit | 3345a1fc6e87cd910602ec0f428073632d2f1ad1 (patch) | |
tree | 664083eed12b89dfd5d976894918cc71ad6dba5d /src | |
parent | 5c5ae3962c46cf4051bcd6d4e2355422e63de42b (diff) | |
download | bfs-3345a1fc6e87cd910602ec0f428073632d2f1ad1.tar.xz |
diag: Don't leave unused assertion messages in the binary
Rather than hiding them with %.0s, use a ternary to replace them with an
empty string if they would be unused.
Diffstat (limited to 'src')
-rw-r--r-- | src/diag.h | 25 |
1 files changed, 19 insertions, 6 deletions
@@ -89,17 +89,26 @@ void bfs_abortf(const char *format, ...); #endif /** + * Get the default assertion message, if no format string was specified. + */ +#define BFS_DIAG_MSG_(format, str) \ + (sizeof(format) > 1 ? "" : str) + +/** * Unconditional assert. */ #define bfs_verify(...) \ bfs_verify_(#__VA_ARGS__, __VA_ARGS__, "", ) #define bfs_verify_(str, cond, format, ...) \ - ((cond) ? (void)0 : bfs_abortf( \ + ((cond) ? (void)0 : bfs_verify__(format, BFS_DIAG_MSG_(format, str), __VA_ARGS__)) + +#define bfs_verify__(format, ...) \ + bfs_abortf( \ sizeof(format) > 1 \ - ? BFS_DIAG_FORMAT_("%.0s" format "%s") \ + ? BFS_DIAG_FORMAT_("%s" format "%s") \ : BFS_DIAG_FORMAT_("Assertion failed: `%s`"), \ - BFS_DIAG_ARGS_(str, __VA_ARGS__))) + BFS_DIAG_ARGS_(__VA_ARGS__)) /** * Unconditional assert, including the last error. @@ -107,12 +116,16 @@ void bfs_abortf(const char *format, ...); #define bfs_everify(...) \ bfs_everify_(#__VA_ARGS__, __VA_ARGS__, "", ) + #define bfs_everify_(str, cond, format, ...) \ - ((cond) ? (void)0 : bfs_abortf( \ + ((cond) ? (void)0 : bfs_everify__(format, BFS_DIAG_MSG_(format, str), __VA_ARGS__)) + +#define bfs_everify__(format, ...) \ + bfs_abortf( \ sizeof(format) > 1 \ - ? BFS_DIAG_FORMAT_("%.0s" format "%s: %s") \ + ? BFS_DIAG_FORMAT_("%s" format "%s: %s") \ : BFS_DIAG_FORMAT_("Assertion failed: `%s`: %s"), \ - BFS_DIAG_ARGS_(str, __VA_ARGS__ errstr(), ))) + BFS_DIAG_ARGS_(__VA_ARGS__ errstr(), )) /** * Assert in debug builds; no-op in release builds. |