[gcc(refs/users/mikael/heads/refactor_descriptor_v03)] Ajout type DEFAULT_INITIALISATION
Mikael Morin
mikael@gcc.gnu.org
Sat Mar 15 19:57:21 GMT 2025
https://gcc.gnu.org/g:2addd2fae6790868133e624d30940ef2c5220656
commit 2addd2fae6790868133e624d30940ef2c5220656
Author: Mikael Morin <mikael@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 41eab9c75d33..7230fe88905f 100644
--- a/gcc/fortran/trans-descriptor.cc
+++ b/gcc/fortran/trans-descriptor.cc
@@ -1090,6 +1090,7 @@ enum descr_change_type {
UNKNOWN_CHANGE,
EXPLICIT_NULLIFICATION,
INITIALISATION,
+ DEFAULT_INITIALISATION,
SCALAR_VALUE
};
@@ -1102,6 +1103,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;
@@ -1154,6 +1161,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;
@@ -1177,6 +1191,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:
@@ -1200,6 +1215,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:
@@ -1333,6 +1349,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
@@ -1412,7 +1430,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;
@@ -1455,7 +1473,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;
More information about the Gcc-cvs
mailing list