https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84310
--- Comment #2 from Martin Liška <marxin at gcc dot gnu.org> --- (In reply to Jakub Jelinek from comment #1) > It should also be a power of 2, shouldn't it? Aligning anything to 4097 > bytes is just weird. No, if you provide a value different from a power of 2 (let's say N), then it means that you want to align to first higher power of two and you allow at maximum N-1 bytes in padding. It's commonly used in i386.c: /* Processor target table, indexed by processor number */ struct ptt { const char *const name; /* processor name */ const struct processor_costs *cost; /* Processor costs */ const int align_loop; /* Default alignments. */ const int align_loop_max_skip; const int align_jump; const int align_jump_max_skip; const int align_func; }; /* This table must be in sync with enum processor_type in i386.h. */ static const struct ptt processor_target_table[PROCESSOR_max] = { {"generic", &generic_cost, 16, 10, 16, 10, 16}, <--- here {"i386", &i386_cost, 4, 3, 4, 3, 4}, {"i486", &i486_cost, 16, 15, 16, 15, 16}, ...