summaryrefslogtreecommitdiffstats
path: root/llvm/include
diff options
context:
space:
mode:
authorXinliang David Li <davidxl@google.com>2015-11-04 23:42:56 +0000
committerXinliang David Li <davidxl@google.com>2015-11-04 23:42:56 +0000
commitf5aff03630215115b98c9a1864e0b085da9a7e05 (patch)
tree81badbc8eb9a0ceae87e5ac9700c056de144cd85 /llvm/include
parent51507d2ad84683daa77d202141d0a63ff94ae9d6 (diff)
downloadbcm5719-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.h28
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
OpenPOWER on IntegriCloud