Michal Schmidt
34c38d2aaa
basic: nicer assert messages
Make sure the assert expression is not macro-expanded before
stringification. This makes several assertion failure messages more
readable.
As an example:
assert(streq("foo", "bar"));
I'd rather see this:
Assertion 'streq("foo", "bar")' failed at foo.c:5, function main(). Aborting.
...than this, though awesome, incomprehensible truncated mess:
Assertion '(__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p ((
"foo")) && __builtin_constant_p (("bar")) && (__s1_len = strlen (("foo")), __s2_
len = strlen (("bar")), (!((size_t)(const void *)((("foo")) + 1) - (size_t)(cons
t void *)(("foo")) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((("bar")
) + 1) - (size_t)(const void *)(("bar")) == 1) || __s2_len >= 4)) ? __builtin_st
rcmp (("foo"), ("bar")) : (__builtin_constant_p (("foo")) && ((size_t)(const voi
d *)((("foo")) + 1) - (size_t)(const void *)(("foo")) == 1) && (__s1_len = strle
n (("foo")), __s1_len < 4) ? (__builtin_constant_p (("bar")) && ((size_t)(const
void *)((("bar")) + 1) - (size_t)(const void *)(("bar")) == 1) ? __builtin_strcm
p (("foo"), ("bar")) : (__extension__ ({ const unsigned char *__s2 = (const unsi
gned char *) (const char *) (("bar")); int __result = (((const unsigned char *)
(const char *) (("foo")))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __
result = (((const unsigned char *) (const char *) (("foo")))[1] - __s2[1]); if (
__s1_len > 1 && __result == 0) { __result = (((const unsigned char *) (const cha
r *) (("foo")))[2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((
const unsigned char *) (const char *) (("foo")))[3] - __s2[3]); } } __result; })
)) : (__builtin_constant_p (("bar")) && ((size_t)(const void *)((("bar")) + 1) -
(size_t)(const void *)(("bar")) == 1) && (__s2_len = strlen (("bar")), __s2_len
< 4) ? (__builtin_constant_p (("foo")) && ((size_t)(const void *)((("foo")) + 1
) - (size_t)(const void *)(("foo")) == 1) ? __builtin_strcmp (("foo"), ("bar"))
: (- (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (cons
t char *) (("foo")); int __result = (((const unsigned char *) (const char *) (("
bar")))[0] - __s2[0]); if (__s2_len > 0 && __result == 0) { __result = (((const
unsigned char *) (const char *) (("bar")))[1] - __s2[1]); if (__s2_len > 1 && __
result == 0) { __result = (((const unsigned char *) (const char *) (("bar")))[2]
- __s2[2]); if (__s2_len > 2 && __result == 0)
2015-09-16 15:48:00 +02:00
..
2015-09-09 09:57:29 +02:00
2015-09-09 08:20:20 +02:00
2015-09-16 15:48:00 +02:00
2015-09-09 14:59:51 +02:00
2015-09-09 15:45:03 +02:00
2015-08-27 16:32:22 +02:00
2015-09-01 23:52:27 +02:00
2015-09-10 19:11:29 +02:00
2015-09-14 23:19:03 +02:00
2015-09-10 10:23:49 +02:00
2015-09-09 15:26:11 +02:00
2015-09-09 14:59:51 +02:00
2015-09-07 13:42:47 +02:00
2015-08-05 21:02:41 -04:00
2015-09-07 13:42:47 +02:00
2015-09-07 13:42:47 +02:00
2015-09-08 21:30:34 +02:00
2015-09-09 14:59:51 +02:00
2015-09-10 18:16:18 +02:00
2015-09-09 08:20:20 +02:00
2015-09-10 18:16:18 +02:00
2015-09-09 15:45:03 +02:00
2015-09-16 15:48:00 +02:00
2015-09-09 08:20:20 +02:00
2015-09-09 08:19:27 +02:00
2015-09-09 15:15:14 +02:00
2015-09-11 16:04:32 +02:00
2015-09-10 18:16:18 +02:00
2015-09-09 08:20:20 +02:00
2015-09-09 14:55:13 +03:00
2015-09-10 18:16:18 +02:00
2015-08-21 12:07:13 +02:00
2015-08-24 22:46:45 +02:00
2015-08-21 12:41:08 +02:00
2015-09-09 08:20:20 +02:00
2015-09-09 23:12:07 +02:00
2015-09-09 08:20:20 +02:00
2015-09-01 20:40:24 +02:00
2015-09-14 23:19:03 +02:00
2015-08-05 11:02:24 +03:00
2015-09-10 19:53:31 +02:00
2015-09-05 14:56:23 +02:00
2015-09-10 18:16:18 +02:00
2015-09-11 18:28:29 +02:00
2015-09-06 00:07:16 +10:00
2015-09-11 18:31:49 +02:00
2015-08-07 15:50:42 +00:00
2015-07-31 19:56:38 +02:00
2015-09-09 14:59:53 +02:00
2015-09-09 08:20:20 +02:00
2015-09-09 08:20:20 +02:00
2015-09-07 13:42:47 +02:00