Port to IBM xlc 12.01

Work around a compiler bug by using a separate enum for alignment.
* src/alloc.c (roundup_size): Declare in a separate enum.
This commit is contained in:
Paul Eggert 2017-11-13 10:06:50 -08:00
parent d14956099d
commit 79108894db

View file

@ -2922,19 +2922,16 @@ set_next_vector (struct Lisp_Vector *v, struct Lisp_Vector *p)
#define VECTOR_BLOCK_SIZE 4096 #define VECTOR_BLOCK_SIZE 4096
enum
{
/* Alignment of struct Lisp_Vector objects. Because pseudovectors /* Alignment of struct Lisp_Vector objects. Because pseudovectors
can contain any C type, align at least as strictly as can contain any C type, align at least as strictly as
max_align_t. On x86 and x86-64 this can waste up to 8 bytes max_align_t. On x86 and x86-64 this can waste up to 8 bytes
for typical vectors, since alignof (max_align_t) is 16 but for typical vectors, since alignof (max_align_t) is 16 but
typical vectors need only an alignment of 8. However, it is typical vectors need only an alignment of 8. However, it is
not worth the hassle to avoid wasting those bytes. */ not worth the hassle to avoid wasting those bytes. */
vector_alignment = COMMON_MULTIPLE (alignof (max_align_t), GCALIGNMENT), enum {vector_alignment = COMMON_MULTIPLE (alignof (max_align_t), GCALIGNMENT)};
/* Vector size requests are a multiple of this. */ /* Vector size requests are a multiple of this. */
roundup_size = COMMON_MULTIPLE (vector_alignment, word_size) enum { roundup_size = COMMON_MULTIPLE (vector_alignment, word_size) };
};
/* Verify assumptions described above. */ /* Verify assumptions described above. */
verify (VECTOR_BLOCK_SIZE % roundup_size == 0); verify (VECTOR_BLOCK_SIZE % roundup_size == 0);