From 9439ae414f662f6923a4067e0906b11baab5fa7c Mon Sep 17 00:00:00 2001 From: =?utf8?q?Tobias=20Schl=C3=BCter?= Date: Sat, 19 Mar 2005 20:45:45 +0100 Subject: [PATCH] re PR fortran/18525 (ICE on valid code in gfc_get_symbol_decl()) fortran/ * dump-parse-tree.c (gfc_show_expr): Dump name of namespace in which the variable is declared. PR fortran/18525 * resolve.c (was_declared): Also check for dummy attribute. testsuite/ PR fortran/18525 * gfortran.dg/nesting_1.f90: New test. From-SVN: r96739 --- gcc/fortran/ChangeLog | 8 ++++++++ gcc/fortran/dump-parse-tree.c | 2 ++ gcc/fortran/resolve.c | 2 +- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gfortran.dg/nesting_1.f90 | 18 ++++++++++++++++++ 5 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gfortran.dg/nesting_1.f90 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 0adec316a71..762b393296e 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,11 @@ +2005-03-18 Tobias Schl"uter + + * dump-parse-tree.c (gfc_show_expr): Dump name of namespace + in which the variable is declared. + + PR fortran/18525 + * resolve.c (was_declared): Also check for dummy attribute. + 2005-03-18 Tobias Schl"uter * gfortran.h (arith): Remove ARITH_0TO0. diff --git a/gcc/fortran/dump-parse-tree.c b/gcc/fortran/dump-parse-tree.c index f8df9dabb12..3df244cca71 100644 --- a/gcc/fortran/dump-parse-tree.c +++ b/gcc/fortran/dump-parse-tree.c @@ -409,6 +409,8 @@ gfc_show_expr (gfc_expr * p) break; case EXPR_VARIABLE: + if (p->symtree->n.sym->ns && p->symtree->n.sym->ns->proc_name) + gfc_status ("%s:", p->symtree->n.sym->ns->proc_name->name); gfc_status ("%s", p->symtree->n.sym->name); gfc_show_ref (p->ref); break; diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 730f4fb1fed..16db94342d1 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -481,7 +481,7 @@ was_declared (gfc_symbol * sym) if (!a.implicit_type && sym->ts.type != BT_UNKNOWN) return 1; - if (a.allocatable || a.dimension || a.external || a.intrinsic + if (a.allocatable || a.dimension || a.dummy || a.external || a.intrinsic || a.optional || a.pointer || a.save || a.target || a.access != ACCESS_UNKNOWN || a.intent != INTENT_UNKNOWN) return 1; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 4d8392038ea..6af630a730d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2005-03-19 Tobias Schlueter + + PR fortran/18525 + * gfortran.dg/nesting_1.f90: New test. + 2005-03-19 Kriang Lerdsuwanakij PR c++/20240 diff --git a/gcc/testsuite/gfortran.dg/nesting_1.f90 b/gcc/testsuite/gfortran.dg/nesting_1.f90 new file mode 100644 index 00000000000..51ebfd999a8 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/nesting_1.f90 @@ -0,0 +1,18 @@ +! PR 18525 +! we used to incorrectly refer to n from a when resolving the call to +! c from b +! { dg-do run } +subroutine a(n) +call b(n+1) +contains + subroutine b(n) + call c(n) + end subroutine b + + subroutine c(m) + if (m/=1) call abort + end subroutine c +end subroutine a + +call a(0) +end -- 2.30.2