• Paul Eggert's avatar
    Port flexible array members to GCC + valgrind · d2f1971d
    Paul Eggert authored
    These changes are needed to conform to the C standard's rule for
    allocating structs containing flexible array members.  C11 says
    that malloc (offsetof (struct s, m) + n) does not suffice to
    allocate a struct with an n-byte tail; instead, malloc’s arg
    should be rounded up to the nearest multiple of alignof (struct s).
    Although this is arguably a defect in C11, gcc -O2 + valgrind
    sometimes complains when this rule is violated, and when debugging
    it’s better to keep valgrind happy.
    For details please see the thread containing the message at:
    https://gcc.gnu.org/ml/gcc-patches/2016-09/msg00416.html
    * lib-src/ebrowse.c, src/alloc.c, src/image.c, src/process.c:
    Include flexmember.h.
    * lib-src/ebrowse.c (add_sym, add_member, make_namespace)
    (register_namespace_alias):
    * src/alloc.c (SDATA_SIZE, allocate_string_data):
    * src/image.c (xpm_cache_color, imagemagick_create_cache):
    * src/process.c (Fmake_network_process):
    Use FLEXSIZEOF instead of offsetof and addition.
    * src/alloc.c (SDATA_SIZE, vector_alignment):
    Use FLEXALIGNOF instead of sizeof (ptrdiff_t).
    * src/lisp.h (ALIGNOF_STRUCT_LISP_VECTOR):
    Remove, as alloc.c can now calculate this on its own.
    d2f1971d
ebrowse.c 91.8 KB