https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94704
--- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Completely untested guess: --- gcc/config/s390/s390.c.jj 2020-03-14 08:14:47.097741411 +0100 +++ gcc/config/s390/s390.c 2020-04-22 14:24:17.980091105 +0200 @@ -11917,7 +11917,8 @@ s390_function_arg_vector (machine_mode m for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field)) { - if (TREE_CODE (field) != FIELD_DECL) + if (TREE_CODE (field) != FIELD_DECL + || cxx17_empty_base_field_p (field)) continue; if (single == NULL_TREE) @@ -11967,7 +11968,8 @@ s390_function_arg_float (machine_mode mo for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field)) { - if (TREE_CODE (field) != FIELD_DECL) + if (TREE_CODE (field) != FIELD_DECL + || cxx17_empty_base_field_p (field)) continue; if (single == NULL_TREE) (on top of the today posted cxx17_empty_base_field_p patch). Though, of course that doesn't handle the -Wpsabi part if s390{,x} wants to emit such diagnostics; for that the functions or their caller should determine if they would make a different ABI decisions if the field wouldn't be skipped.