1
1
/* Determine alignment of types.
2
Copyright (C) 2003-2004, 2006, 2009 Free Software Foundation, Inc.
2
Copyright (C) 2003-2004, 2006, 2009-2010 Free Software Foundation, Inc.
4
4
This program is free software; you can redistribute it and/or modify
5
5
it under the terms of the GNU General Public License as published by
21
21
#include <stddef.h>
23
/* Determine the alignment of a type at compile time. */
23
/* Determine the alignment of a structure slot (field) of a given type,
24
at compile time. Note that the result depends on the ABI.
25
Note: The result cannot be used as a value for an 'enum' constant,
26
due to bugs in HP-UX 10.20 cc and AIX 3.2.5 xlc. */
27
#if defined __cplusplus
28
template <class type> struct alignof_helper { char __slot1; type __slot2; };
29
# define alignof_slot(type) offsetof (alignof_helper<type>, __slot2)
31
# define alignof_slot(type) offsetof (struct { char __slot1; type __slot2; }, __slot2)
34
/* Determine the good alignment of a object of the given type at compile time.
35
Note that this is not necessarily the same as alignof_slot(type).
36
For example, with GNU C on x86 platforms: alignof_type(double) = 8, but
37
- when -malign-double is not specified: alignof_slot(double) = 4,
38
- when -malign-double is specified: alignof_slot(double) = 8.
39
Note: The result cannot be used as a value for an 'enum' constant,
40
due to bugs in HP-UX 10.20 cc and AIX 3.2.5 xlc. */
24
41
#if defined __GNUC__
25
# define alignof __alignof__
26
#elif defined __cplusplus
27
template <class type> struct alignof_helper { char __slot1; type __slot2; };
28
# define alignof(type) offsetof (alignof_helper<type>, __slot2)
42
# define alignof_type __alignof__
30
# define alignof(type) offsetof (struct { char __slot1; type __slot2; }, __slot2)
44
# define alignof_type alignof_slot
47
/* alignof is an alias for alignof_slot semantics, since that's what most
49
Note: The result cannot be used as a value for an 'enum' constant,
50
due to bugs in HP-UX 10.20 cc and AIX 3.2.5 xlc. */
51
#define alignof alignof_slot
33
53
#endif /* _ALIGNOF_H */