Mercurial > hg > octave-kai > gnulib-hg
changeset 11599:9ef2eb4b8fe1
Fix test-alignof failure.
author | Bruno Haible <bruno@clisp.org> |
---|---|
date | Sun, 31 May 2009 21:43:32 +0200 |
parents | 58b1732d052a |
children | 4744bae3ea84 |
files | ChangeLog lib/alignof.h tests/test-alignof.c |
diffstat | 3 files changed, 35 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2009-05-31 Simon Josefsson <simon@josefsson.org> + Bruno Haible <bruno@clisp.org> + + Fix test-alignof failure. + * lib/alignof.h (alignof_slot): New macro. + (alignof_type): New macro, with the same semantics as the previous + 'alignof'. + (alignof): Alias to alignof_slot. + * tests/test-alignof.c (CHECK): Check alignof_slot, not alignof. Also + check that the results are usable as constant expressions. + 2009-05-31 Bruno Haible <bruno@clisp.org> * tests/zerosize-ptr.h (zerosize_ptr): Specify more details.
--- a/lib/alignof.h +++ b/lib/alignof.h @@ -20,14 +20,29 @@ #include <stddef.h> -/* Determine the alignment of a type at compile time. */ -#if defined __GNUC__ -# define alignof __alignof__ -#elif defined __cplusplus +/* Determine the alignment of a structure slot (field) of a given type, + at compile time. Note that the result depends on the ABI. */ +#if defined __cplusplus template <class type> struct alignof_helper { char __slot1; type __slot2; }; -# define alignof(type) offsetof (alignof_helper<type>, __slot2) +# define alignof_slot(type) offsetof (alignof_helper<type>, __slot2) #else -# define alignof(type) offsetof (struct { char __slot1; type __slot2; }, __slot2) +# define alignof_slot(type) offsetof (struct { char __slot1; type __slot2; }, __slot2) #endif +/* Determine the good alignment of a object of the given type at compile time. + Note that this is not necessarily the same as alignof_slot(type). + For example, with GNU C on x86 platforms: alignof_type(double) = 8, but + - when -malign-double is not specified: alignof_slot(double) = 4, + - when -malign-double is specified: alignof_slot(double) = 8. */ +#if defined __GNUC__ +# define alignof_type __alignof__ +#else +# define alignof_type alignof_slot +#endif + +/* alignof is an alias for alignof_slot semantics, since that's what most + callers need. + Note: The result cannot be used as a value for an 'enum' constant, */ +#define alignof alignof_slot + #endif /* _ALIGNOF_H */
--- a/tests/test-alignof.c +++ b/tests/test-alignof.c @@ -31,7 +31,9 @@ #define CHECK(type) \ typedef struct { char slot1; type slot2; } type##_helper; \ - verify (alignof (type) == offsetof (type##_helper, slot2)); + verify (alignof_slot (type) == offsetof (type##_helper, slot2)); \ + const int type##_slot_alignment = alignof_slot (type); \ + const int type##_type_alignment = alignof_type (type); CHECK (char) CHECK (short)