forked from OSchip/llvm-project
Define portable macros for packed struct definitions:
1. A macro with argument: LLVM_PACKED(StructDefinition) 2. A pair of macros defining scope of region with packing: LLVM_PACKED_START struct A { ... }; struct B { ... }; LLVM_PACKED_END Differential Revision: http://reviews.llvm.org/D14337 llvm-svn: 252099
This commit is contained in:
parent
51507d2ad8
commit
f5aff03630
|
@ -293,6 +293,34 @@
|
||||||
# define LLVM_ALIGNAS(x) alignas(x)
|
# define LLVM_ALIGNAS(x) alignas(x)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/// \macro LLVM_PACKED
|
||||||
|
/// \brief Used to specify a packed structure.
|
||||||
|
/// LLVM_PACKED(
|
||||||
|
/// struct A {
|
||||||
|
/// int i;
|
||||||
|
/// int j;
|
||||||
|
/// int k;
|
||||||
|
/// long long l;
|
||||||
|
/// });
|
||||||
|
///
|
||||||
|
/// LLVM_PACKED_START
|
||||||
|
/// struct B {
|
||||||
|
/// int i;
|
||||||
|
/// int j;
|
||||||
|
/// int k;
|
||||||
|
/// long long l;
|
||||||
|
/// };
|
||||||
|
/// LLVM_PACKED_END
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
# define LLVM_PACKED(d) __pragma(pack(push, 1)) d __pragma(pack(pop))
|
||||||
|
# define LLVM_PACKED_START __pragma(pack(push, 1))
|
||||||
|
# define LLVM_PACKED_END __pragma(pack(pop))
|
||||||
|
#else
|
||||||
|
# define LLVM_PACKED(d) d __attribute__((packed))
|
||||||
|
# define LLVM_PACKED_START _Pragma("pack(push, 1)")
|
||||||
|
# define LLVM_PACKED_END _Pragma("pack(pop)")
|
||||||
|
#endif
|
||||||
|
|
||||||
/// \macro LLVM_PTR_SIZE
|
/// \macro LLVM_PTR_SIZE
|
||||||
/// \brief A constant integer equivalent to the value of sizeof(void*).
|
/// \brief A constant integer equivalent to the value of sizeof(void*).
|
||||||
/// Generally used in combination with LLVM_ALIGNAS or when doing computation in
|
/// Generally used in combination with LLVM_ALIGNAS or when doing computation in
|
||||||
|
|
Loading…
Reference in New Issue