Comment # 3 on bug 1042012 from
The type of `struct cdata' is defined and declared in
texk/web2c/luatexdir/luaffi/ffi.h with

 #ifdef _MSC_VER
 __declspec(align(16))
 #endif
 struct cdata {
     const struct ctype type
 #ifdef __GNUC__
       __attribute__ ((aligned(16)))
 #endif
       ;
 };

Whereas `struct ctype' is given in the same file at line 320 upto 366 with

 /* Note: if adding a new member that is associated with a struct/union
  * definition then it needs to be copied over in ctype.c:set_defined for when
  * we create types based off of the declaration alone.
  *
  * Since this is used as a header for every ctype and cdata, and we create a
  * ton of them on the stack, we try and minimise its size.
  */
 struct ctype {
     size_t base_size; /* size of the base type in bytes */

     union {
         /* valid if is_bitfield */
         struct {
             /* size of bitfield in bits */
             unsigned bit_size : 7;
             /* offset within the current byte between 0-63 */
             unsigned bit_offset : 6;
         };
         /* Valid if is_array */
         size_t array_size;
         /* Valid for is_variable_struct or is_variable_array. If
          * variable_size_known (only used for is_variable_struct) then this is
          * the total increment otherwise this is the per element increment.
          */
         size_t variable_increment;
     };
     size_t offset;
     unsigned align_mask : 4; /* as (align bytes - 1) eg 7 gives 8 byte
alignment */
     unsigned pointers : POINTER_BITS; /* number of dereferences to get to the
base type including +1 for arrays */
     unsigned const_mask : POINTER_MAX + 1; /* const pointer mask, LSB is
current pointer, +1 for the whether the base type is const */
     unsigned type : 5; /* value given by type enum above */
     unsigned is_reference : 1;
     unsigned is_array : 1;
     unsigned is_defined : 1;
     unsigned is_null : 1;
     unsigned has_member_name : 1;
     unsigned calling_convention : 2;
     unsigned has_var_arg : 1;
     unsigned is_variable_array : 1; /* set for variable array types where we
don't know the variable size yet */
     unsigned is_variable_struct : 1;
     unsigned variable_size_known : 1; /* used for variable structs after we
know the variable size */
     unsigned is_bitfield : 1;
     unsigned has_bitfield : 1;
     unsigned is_jitted : 1;
     unsigned is_packed : 1;
     unsigned is_unsigned : 1;
 };

with

 #define POINTER_BITS 2
 #define POINTER_MAX ((1 << POINTER_BITS) - 1)

at line 315


You are receiving this mail because: