diff options
| author | Xinliang David Li <davidxl@google.com> | 2015-11-04 23:42:56 +0000 |
|---|---|---|
| committer | Xinliang David Li <davidxl@google.com> | 2015-11-04 23:42:56 +0000 |
| commit | f5aff03630215115b98c9a1864e0b085da9a7e05 (patch) | |
| tree | 81badbc8eb9a0ceae87e5ac9700c056de144cd85 /llvm/include | |
| parent | 51507d2ad84683daa77d202141d0a63ff94ae9d6 (diff) | |
| download | bcm5719-llvm-f5aff03630215115b98c9a1864e0b085da9a7e05.tar.gz bcm5719-llvm-f5aff03630215115b98c9a1864e0b085da9a7e05.zip | |
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
Diffstat (limited to 'llvm/include')
| -rw-r--r-- | llvm/include/llvm/Support/Compiler.h | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/llvm/include/llvm/Support/Compiler.h b/llvm/include/llvm/Support/Compiler.h index f744237e583..99a02f7ada0 100644 --- a/llvm/include/llvm/Support/Compiler.h +++ b/llvm/include/llvm/Support/Compiler.h @@ -293,6 +293,34 @@ # define LLVM_ALIGNAS(x) alignas(x) #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 /// \brief A constant integer equivalent to the value of sizeof(void*). /// Generally used in combination with LLVM_ALIGNAS or when doing computation in |

