[PATCH] D14337: Define a portable macro for specifying packed struct

David Li via llvm-commits llvm-commits at lists.llvm.org
Wed Nov 4 15:45:31 PST 2015


This revision was automatically updated to reflect the committed changes.
Closed by commit rL252099: Define portable macros for packed struct definitions: (authored by davidxl).

Changed prior to commit:
  http://reviews.llvm.org/D14337?vs=39275&id=39279#toc

Repository:
  rL LLVM

http://reviews.llvm.org/D14337

Files:
  llvm/trunk/include/llvm/Support/Compiler.h

Index: llvm/trunk/include/llvm/Support/Compiler.h
===================================================================
--- llvm/trunk/include/llvm/Support/Compiler.h
+++ llvm/trunk/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


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D14337.39279.patch
Type: text/x-patch
Size: 1149 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20151104/08d9b22f/attachment.bin>


More information about the llvm-commits mailing list