diff options
author | Rusty Russell <rusty@rustcorp.com.au> | 2012-03-29 14:58:33 +1030 |
---|---|---|
committer | Rusty Russell <rusty@rustcorp.com.au> | 2012-03-29 08:18:57 +0200 |
commit | f74ae3257a2edb9756d9f0442c1314306e936759 (patch) | |
tree | c2e960788b0385bbe09bfc7705564f85c7a4d355 /lib/ccan/cast/test | |
parent | be25ab9c8df2f96ee10929fdfee582935b2f0e06 (diff) | |
download | samba-f74ae3257a2edb9756d9f0442c1314306e936759.tar.gz samba-f74ae3257a2edb9756d9f0442c1314306e936759.tar.bz2 samba-f74ae3257a2edb9756d9f0442c1314306e936759.zip |
cast: make sure suncc sees a constant.
cast_const() et. al. are supposed to be a constant expression, so you can do things like:
static char *p = cast_const(char *, (const char *)"hello");
Unfortunately, a cast to intptr_t and arithmetic makes suncc reject it as
a constant expression. We need the cast, because (1) the expression could be
a void *, so we can't just add to it, and (2) gcc complains with -Wcast-qual
without it.
So instead of adding BUILD_BUG_OR_ZERO, we use a ? :, which keeps everyone happy.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
(Imported from CCAN commit 74859ab18b10aaf990848e49d7789ff5c6cf96c6)
Autobuild-User: Rusty Russell <rusty@rustcorp.com.au>
Autobuild-Date: Thu Mar 29 08:18:57 CEST 2012 on sn-devel-104
Diffstat (limited to 'lib/ccan/cast/test')
-rw-r--r-- | lib/ccan/cast/test/compile_ok-static.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/lib/ccan/cast/test/compile_ok-static.c b/lib/ccan/cast/test/compile_ok-static.c new file mode 100644 index 0000000000..98b667e834 --- /dev/null +++ b/lib/ccan/cast/test/compile_ok-static.c @@ -0,0 +1,10 @@ +/* OpenIndiana's CC (aka suncc) has issues with constants: make sure + * we are one! */ +#include <ccan/cast/cast.h> + +static char *p = cast_const(char *, (const char *)"hello"); + +int main(int argc, char *argv[]) +{ + return p[0] == argv[0][0]; +} |