https://gcc.gnu.org/g:e983f706e3bf3b9537017b30da0179a01854201b
commit e983f706e3bf3b9537017b30da0179a01854201b Author: Mikael Morin <mik...@gcc.gnu.org> Date: Wed Aug 13 15:34:36 2025 +0200 Correction pr87992.f90 Diff: --- gcc/fortran/trans-descriptor.cc | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/gcc/fortran/trans-descriptor.cc b/gcc/fortran/trans-descriptor.cc index e3136475c968..84145f13f7df 100644 --- a/gcc/fortran/trans-descriptor.cc +++ b/gcc/fortran/trans-descriptor.cc @@ -607,7 +607,6 @@ tree gfc_get_dtype_rank_type_slen (int rank, tree etype, tree length) { tree ptype; - tree size; int n; tree dtype; tree field; @@ -668,6 +667,7 @@ gfc_get_dtype_rank_type_slen (int rank, tree etype, tree length) gcc_unreachable (); } + tree size = NULL_TREE; switch (n) { case BT_CHARACTER: @@ -675,23 +675,24 @@ gfc_get_dtype_rank_type_slen (int rank, tree etype, tree length) size = gfc_get_character_len_in_bytes (ptype, length); break; case BT_VOID: - gcc_assert (TREE_CODE (ptype) == POINTER_TYPE); - size = size_in_bytes (ptype); + if (TREE_CODE (ptype) == POINTER_TYPE) + size = size_in_bytes (ptype); break; default: size = size_in_bytes (etype); break; } - gcc_assert (size); - - STRIP_NOPS (size); - size = fold_convert (size_type_node, size); tree dtype_type_node = get_dtype_type_node (); - field = gfc_advance_chain (TYPE_FIELDS (dtype_type_node), - GFC_DTYPE_ELEM_LEN); - CONSTRUCTOR_APPEND_ELT (v, field, - fold_convert (TREE_TYPE (field), size)); + if (size) + { + STRIP_NOPS (size); + size = fold_convert (size_type_node, size); + field = gfc_advance_chain (TYPE_FIELDS (dtype_type_node), + GFC_DTYPE_ELEM_LEN); + CONSTRUCTOR_APPEND_ELT (v, field, + fold_convert (TREE_TYPE (field), size)); + } field = gfc_advance_chain (TYPE_FIELDS (dtype_type_node), GFC_DTYPE_VERSION); CONSTRUCTOR_APPEND_ELT (v, field,