pacemaker
1.1.18-7fdfbbe
Scalable High-Availability cluster resource manager
Main Page
Related Pages
Modules
Data Structures
Files
File List
Globals
All
Data Structures
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
lib
gnu
stdalign.in.h
Go to the documentation of this file.
1
/* A substitute for ISO C11 <stdalign.h>.
2
3
Copyright 2011-2012 Free Software Foundation, Inc.
4
5
This program is free software; you can redistribute it and/or modify
6
it under the terms of the GNU Lesser General Public License as published by
7
the Free Software Foundation; either version 2.1, or (at your option)
8
any later version.
9
10
This program is distributed in the hope that it will be useful,
11
but WITHOUT ANY WARRANTY; without even the implied warranty of
12
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
GNU Lesser General Public License for more details.
14
15
You should have received a copy of the GNU Lesser General Public License
16
along with this program; if not, see <http://www.gnu.org/licenses/>. */
17
18
/* Written by Paul Eggert and Bruno Haible. */
19
20
#ifndef _GL_STDALIGN_H
21
#define _GL_STDALIGN_H
22
23
/* ISO C11 <stdalign.h> for platforms that lack it.
24
25
References:
26
ISO C11 (latest free draft
27
<http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf>)
28
sections 6.5.3.4, 6.7.5, 7.15.
29
C++11 (latest free draft
30
<http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3242.pdf>)
31
section 18.10. */
32
33
/* alignof (TYPE), also known as _Alignof (TYPE), yields the alignment
34
requirement of a structure member (i.e., slot or field) that is of
35
type TYPE, as an integer constant expression.
36
37
This differs from GCC's __alignof__ operator, which can yield a
38
better-performing alignment for an object of that type. For
39
example, on x86 with GCC, __alignof__ (double) and __alignof__
40
(long long) are 8, whereas alignof (double) and alignof (long long)
41
are 4 unless the option '-malign-double' is used.
42
43
The result cannot be used as a value for an 'enum' constant, if you
44
want to be portable to HP-UX 10.20 cc and AIX 3.2.5 xlc. */
45
#include <stddef.h>
46
#if defined __cplusplus
47
template
<
class
__t>
struct
__alignof_helper {
char
__a; __t __b; };
48
# define _Alignof(type) offsetof (__alignof_helper<type>, __b)
49
#else
50
# define _Alignof(type) offsetof (struct { char __a; type __b; }, __b)
51
#endif
52
#define alignof _Alignof
53
#define __alignof_is_defined 1
54
55
/* alignas (A), also known as _Alignas (A), aligns a variable or type
56
to the alignment A, where A is an integer constant expression. For
57
example:
58
59
int alignas (8) foo;
60
struct s { int a; int alignas (8) bar; };
61
62
aligns the address of FOO and the offset of BAR to be multiples of 8.
63
64
A should be a power of two that is at least the type's alignment
65
and at most the implementation's alignment limit. This limit is
66
2**28 on typical GNUish hosts, and 2**13 on MSVC. To be portable
67
to MSVC through at least version 10.0, A should be an integer
68
constant, as MSVC does not support expressions such as 1 << 3.
69
To be portable to Sun C 5.11, do not align auto variables to
70
anything stricter than their default alignment.
71
72
The following C11 requirements are not supported here:
73
74
- If A is zero, alignas has no effect.
75
- alignas can be used multiple times; the strictest one wins.
76
- alignas (TYPE) is equivalent to alignas (alignof (TYPE)).
77
78
*/
79
80
#if __GNUC__ || __IBMC__ || __IBMCPP__ || 0x5110 <= __SUNPRO_C
81
# define _Alignas(a) __attribute__ ((__aligned__ (a)))
82
#elif 1300 <= _MSC_VER
83
# define _Alignas(a) __declspec (align (a))
84
#endif
85
#ifdef _Alignas
86
# define alignas _Alignas
87
# define __alignas_is_defined 1
88
#endif
89
90
#endif
/* _GL_STDALIGN_H */
Generated on Tue Nov 14 2017 16:40:16 for pacemaker by
1.8.5