diff options
Diffstat (limited to 'gcc/fortran/dump-parse-tree.c')
-rw-r--r-- | gcc/fortran/dump-parse-tree.c | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/gcc/fortran/dump-parse-tree.c b/gcc/fortran/dump-parse-tree.c index 798519f..513f211 100644 --- a/gcc/fortran/dump-parse-tree.c +++ b/gcc/fortran/dump-parse-tree.c @@ -1000,12 +1000,18 @@ show_symbol (gfc_symbol *sym) show_expr (sym->value); } - if (sym->as) + if (sym->ts.type != BT_CLASS && sym->as) { show_indent (); fputs ("Array spec:", dumpfile); show_array_spec (sym->as); } + else if (sym->ts.type == BT_CLASS && CLASS_DATA (sym)->as) + { + show_indent (); + fputs ("Array spec:", dumpfile); + show_array_spec (CLASS_DATA (sym)->as); + } if (sym->generic) { @@ -2168,18 +2174,22 @@ show_code_node (int level, gfc_code *c) case EXEC_SELECT: case EXEC_SELECT_TYPE: + case EXEC_SELECT_RANK: d = c->block; - if (c->op == EXEC_SELECT_TYPE) + fputc ('\n', dumpfile); + code_indent (level, 0); + if (c->op == EXEC_SELECT_RANK) + fputs ("SELECT RANK ", dumpfile); + else if (c->op == EXEC_SELECT_TYPE) fputs ("SELECT TYPE ", dumpfile); else fputs ("SELECT CASE ", dumpfile); show_expr (c->expr1); - fputc ('\n', dumpfile); for (; d; d = d->block) { + fputc ('\n', dumpfile); code_indent (level, 0); - fputs ("CASE ", dumpfile); for (cp = d->ext.block.case_list; cp; cp = cp->next) { @@ -2190,9 +2200,9 @@ show_code_node (int level, gfc_code *c) fputc (')', dumpfile); fputc (' ', dumpfile); } - fputc ('\n', dumpfile); show_code (level + 1, d->next); + fputc ('\n', dumpfile); } code_indent (level, c->label1); |