diff options
| author | Thomas Guyot-Sionnest <dermoth@aei.ca> | 2010-04-07 21:11:46 -0400 |
|---|---|---|
| committer | Thomas Guyot-Sionnest <dermoth@aei.ca> | 2010-04-12 21:26:35 -0400 |
| commit | 74da141e618ef99959d509cb2e7be35a348a39db (patch) | |
| tree | 88ebc38b381a1021fc2d74864a71e230ae591c3d /gl/alignof.h | |
| parent | c63a4f726a0b6ad8cf6040f947754a81fd4683bb (diff) | |
| download | monitoring-plugins-74da141e618ef99959d509cb2e7be35a348a39db.tar.gz | |
Sync with the latest Gnulib code (177f525)
Signed-off-by: Thomas Guyot-Sionnest <dermoth@aei.ca>
Diffstat (limited to 'gl/alignof.h')
| -rw-r--r-- | gl/alignof.h | 34 |
1 files changed, 27 insertions, 7 deletions
diff --git a/gl/alignof.h b/gl/alignof.h index 896382b0..240468c6 100644 --- a/gl/alignof.h +++ b/gl/alignof.h | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | /* Determine alignment of types. | 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. |
| 3 | 3 | ||
| 4 | This program is free software; you can redistribute it and/or modify | 4 | This program is free software; you can redistribute it and/or modify |
| 5 | it under the terms of the GNU General Public License as published by | 5 | it under the terms of the GNU General Public License as published by |
| @@ -20,14 +20,34 @@ | |||
| 20 | 20 | ||
| 21 | #include <stddef.h> | 21 | #include <stddef.h> |
| 22 | 22 | ||
| 23 | /* Determine the alignment of a type at compile time. */ | 23 | /* Determine the alignment of a structure slot (field) of a given type, |
| 24 | #if defined __GNUC__ | 24 | at compile time. Note that the result depends on the ABI. |
| 25 | # define alignof __alignof__ | 25 | Note: The result cannot be used as a value for an 'enum' constant, |
| 26 | #elif defined __cplusplus | 26 | due to bugs in HP-UX 10.20 cc and AIX 3.2.5 xlc. */ |
| 27 | #if defined __cplusplus | ||
| 27 | template <class type> struct alignof_helper { char __slot1; type __slot2; }; | 28 | template <class type> struct alignof_helper { char __slot1; type __slot2; }; |
| 28 | # define alignof(type) offsetof (alignof_helper<type>, __slot2) | 29 | # define alignof_slot(type) offsetof (alignof_helper<type>, __slot2) |
| 30 | #else | ||
| 31 | # define alignof_slot(type) offsetof (struct { char __slot1; type __slot2; }, __slot2) | ||
| 32 | #endif | ||
| 33 | |||
| 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. */ | ||
| 41 | #if defined __GNUC__ | ||
| 42 | # define alignof_type __alignof__ | ||
| 29 | #else | 43 | #else |
| 30 | # define alignof(type) offsetof (struct { char __slot1; type __slot2; }, __slot2) | 44 | # define alignof_type alignof_slot |
| 31 | #endif | 45 | #endif |
| 32 | 46 | ||
| 47 | /* alignof is an alias for alignof_slot semantics, since that's what most | ||
| 48 | callers need. | ||
| 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 | ||
| 52 | |||
| 33 | #endif /* _ALIGNOF_H */ | 53 | #endif /* _ALIGNOF_H */ |
