Hello world,
like it says in the ChangeLog. Regression-tested, no user impact,
obvious and simple.
Best regards
Thomas
Showing ALLOCATE typespecs and walking character lengths in code walker.
This dumps the typespec of an ALLOCATE statement and also walks the charlen
of a character espression and an array if present.
gcc/fortran/ChangeLog:
* dump-parse-tree.cc (show_code_node): Show typespec for
ALLOCATE if present.
* frontend-passes.cc (gfc_expr_walker): Walk the character
typespec length for array expressions.
(gfc_code_walker): Walk the typespec for ALLOCATE if present.diff --git a/gcc/fortran/dump-parse-tree.cc b/gcc/fortran/dump-parse-tree.cc
index eaf6565d0e0..5f058cdc830 100644
--- a/gcc/fortran/dump-parse-tree.cc
+++ b/gcc/fortran/dump-parse-tree.cc
@@ -3407,6 +3407,13 @@ show_code_node (int level, gfc_code *c)
case EXEC_ALLOCATE:
fputs ("ALLOCATE ", dumpfile);
+
+ if (c->ext.alloc.ts.type != BT_UNKNOWN)
+ {
+ show_typespec (&c->ext.alloc.ts);
+ fputs (":: ", dumpfile);
+ }
+
if (c->expr1)
{
fputs (" STAT=", dumpfile);
diff --git a/gcc/fortran/frontend-passes.cc b/gcc/fortran/frontend-passes.cc
index 87ac6e0a4e7..92678310ffd 100644
--- a/gcc/fortran/frontend-passes.cc
+++ b/gcc/fortran/frontend-passes.cc
@@ -5306,8 +5306,14 @@ gfc_expr_walker (gfc_expr **e, walk_expr_fn_t exprfn, void *data)
WALK_SUBEXPR (a->expr);
break;
- case EXPR_STRUCTURE:
case EXPR_ARRAY:
+ if ((*e)->ts.type == BT_CHARACTER)
+ WALK_SUBEXPR ((*e)->ts.u.cl->length);
+
+ gcc_fallthrough ();
+
+ case EXPR_STRUCTURE:
+
for (c = gfc_constructor_first ((*e)->value.constructor); c;
c = gfc_constructor_next (c))
{
@@ -5480,6 +5486,11 @@ gfc_code_walker (gfc_code **c, walk_code_fn_t codefn, walk_expr_fn_t exprfn,
continue;
case EXEC_ALLOCATE:
+ if (co->ext.alloc.ts.type == BT_CHARACTER)
+ WALK_SUBEXPR (co->ext.alloc.ts.u.cl->length);
+
+ gcc_fallthrough();
+
case EXEC_DEALLOCATE:
{
gfc_alloc *a;