Mercurial > hg > octave-kai > gnulib-hg
changeset 13559:3c81a57b5a1d
test-stddef: test for (some) offsetof bugs
See the mailing list for a more comprehensive patch that works
around the Solaris bug.
* tests/test-stddef.c: Enhance test to ensure correct type of
offsetof.
* doc/posix-headers/stddef.texi (stddef.h): Document a Solaris bug
that we are not fixing at this time.
Signed-off-by: Eric Blake <eblake@redhat.com>
author | Eric Blake <eblake@redhat.com> |
---|---|
date | Mon, 16 Aug 2010 17:34:45 -0600 |
parents | 263949fe34ae |
children | 8370fed98298 |
files | ChangeLog doc/posix-headers/stddef.texi tests/test-stddef.c |
diffstat | 3 files changed, 29 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2010-08-17 Eric Blake <eblake@redhat.com> + + test-stddef: test for (some) offsetof bugs + * tests/test-stddef.c: Enhance test to ensure correct type of + offsetof. + * doc/posix-headers/stddef.texi (stddef.h): Document a Solaris bug + that we are not fixing at this time. + 2010-08-15 Bruno Haible <bruno@clisp.org> stpncpy: Allow stpncpy to be defined as a macro.
--- a/doc/posix-headers/stddef.texi +++ b/doc/posix-headers/stddef.texi @@ -18,4 +18,11 @@ Portability problems not fixed by Gnulib: @itemize +@item +Some platforms provide an @code{offsetof} macro that cannot be used in +arbitrary expressions: +Solaris 10 +This problem can be worked around by parenthesizing the +@code{offsetof} expression in the unlikely case you use it with +@code{sizeof} or @samp{[]}. @end itemize
--- a/tests/test-stddef.c +++ b/tests/test-stddef.c @@ -31,6 +31,20 @@ per POSIX 2008. */ verify (sizeof NULL == sizeof (void *)); +/* Check that offsetof produces integer constants with correct type. */ +struct d +{ + char e; + char f; +}; +/* Solaris 10 has a bug where offsetof is under-parenthesized, and + cannot be used as an arbitrary expression. However, since it is + unlikely to bite real code, we ignore that short-coming. */ +/* verify (sizeof offsetof (struct d, e) == sizeof (size_t)); */ +verify (sizeof (offsetof (struct d, e)) == sizeof (size_t)); +verify (offsetof (struct d, e) < -1); /* Must be unsigned. */ +verify (offsetof (struct d, f) == 1); + int main (void) {