https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119260
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Ever confirmed|0 |1 Last reconfirmed| |2025-03-13 Status|UNCONFIRMED |NEW Known to fail| |7.5.0 --- Comment #4 from Richard Biener <rguenth at gcc dot gnu.org> --- bool get_object_alignment_2 (tree exp, unsigned int *alignp, unsigned HOST_WIDE_INT *bitposp, bool addr_p) { unsigned int align = BITS_PER_UNIT; ... /* Extract alignment information from the innermost object and possibly adjust bitpos and offset. */ if (TREE_CODE (exp) == FUNCTION_DECL) { /* Function addresses can encode extra information besides their alignment. However, if TARGET_PTRMEMFUNC_VBIT_LOCATION allows the low bit to be used as a virtual bit, we know that the address itself must be at least 2-byte aligned. */ if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn) align = 2 * BITS_PER_UNIT; } we don't compute anything for functions, but the above can cause the expression to "diverge" for the integer cast value, like if you want to test that virtual bit. Only x86 has it this way.