https://gcc.gnu.org/g:834c7fdfc71ff0070ef1f1ec3ca2554901b55adb
commit 834c7fdfc71ff0070ef1f1ec3ca2554901b55adb Author: Mikael Morin <mik...@gcc.gnu.org> Date: Sat Mar 15 20:56:48 2025 +0100 Ajout type DEFAULT_INITIALISATION Diff: --- gcc/fortran/trans-descriptor.cc | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/gcc/fortran/trans-descriptor.cc b/gcc/fortran/trans-descriptor.cc index 2e926224ef8a..2be20e582bee 100644 --- a/gcc/fortran/trans-descriptor.cc +++ b/gcc/fortran/trans-descriptor.cc @@ -1077,6 +1077,7 @@ enum descr_change_type { UNKNOWN_CHANGE, EXPLICIT_NULLIFICATION, INITIALISATION, + DEFAULT_INITIALISATION, SCALAR_VALUE }; @@ -1089,6 +1090,12 @@ struct descr_change_info { class modify_info *unknown_info; class nullification *nullification_info; class init_info *initialization_info; + struct + { + class default_init *info; + const symbol_attribute *attr; + } + default_init; struct { class scalar_value *info; @@ -1141,6 +1148,13 @@ get_descr_data_value (const descr_change_info &info) case INITIALISATION: return info.u.initialization_info->get_data_value (); + case DEFAULT_INITIALISATION: + if (!info.u.default_init.attr->pointer + || (gfc_option.rtcheck & GFC_RTCHECK_POINTER)) + return null_pointer_node; + else + return NULL_TREE; + case SCALAR_VALUE: { tree value = info.u.scalar_value.value; @@ -1164,6 +1178,7 @@ get_descr_span (const descr_change_info &info) case UNKNOWN_CHANGE: case EXPLICIT_NULLIFICATION: case INITIALISATION: + case DEFAULT_INITIALISATION: return NULL_TREE; case SCALAR_VALUE: @@ -1187,6 +1202,7 @@ get_descr_caf_token (const descr_change_info &info) case UNKNOWN_CHANGE: case EXPLICIT_NULLIFICATION: case INITIALISATION: + case DEFAULT_INITIALISATION: return null_pointer_node; case SCALAR_VALUE: @@ -1320,6 +1336,8 @@ get_descr_dtype (const descr_change_info &change_info, gfc_typespec *ts, const init_info *init_info = nullptr; if (change_info.type == INITIALISATION) init_info = change_info.u.initialization_info; + else if (change_info.type == DEFAULT_INITIALISATION) + init_info = change_info.u.default_init.info; else if (change_info.type == SCALAR_VALUE) init_info = change_info.u.scalar_value.info; else @@ -1399,7 +1417,7 @@ get_default_array_descriptor_init (tree type, gfc_typespec &ts, int rank, default_init di (attr); struct descr_change_info info; - info.type = INITIALISATION; + info.type = DEFAULT_INITIALISATION; info.descriptor_type = type; info.u.initialization_info = &di; @@ -1442,7 +1460,7 @@ gfc_build_default_array_descriptor (tree type, gfc_typespec &ts, int rank, default_init di (attr); struct descr_change_info info; - info.type = INITIALISATION; + info.type = DEFAULT_INITIALISATION; info.descriptor_type = type; info.u.initialization_info = &di;