https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109510
--- Comment #11 from Richard Biener <rguenth at gcc dot gnu.org> --- It might be possible to re-write the aarch64 assert to be instead diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc index f4ef22ce02f..9da46a5e45d 100644 --- a/gcc/config/aarch64/aarch64.cc +++ b/gcc/config/aarch64/aarch64.cc @@ -7489,13 +7489,15 @@ aarch64_function_arg_alignment (machine_mode mode, const_tree type, any attributes applied. Normally this is the alignment of the TYPE_MAIN_VARIANT, but not always; see PR108910 for a counterexample. For now we just handle the known exceptions explicitly. */ + tree orig_type = type; type = TYPE_MAIN_VARIANT (type); if (POINTER_TYPE_P (type)) { gcc_assert (known_eq (POINTER_SIZE, GET_MODE_BITSIZE (mode))); return POINTER_SIZE; } - gcc_assert (!TYPE_USER_ALIGN (type)); + gcc_assert (TYPE_ALIGN (type) == TYPE_ALIGN (orig_type) + || TYPE_USER_ALIGN (orig_type)); return TYPE_ALIGN (type); } I'm not sure if that captures the original intent of the assert though. Maybe instead || !TYPE_USER_ALIGN (type)?