diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/fortran/interface.c | 2 | ||||
-rw-r--r-- | gcc/fortran/trans-decl.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/warn_unused_dummy_argument_6.f90 | 13 |
3 files changed, 15 insertions, 2 deletions
diff --git a/gcc/fortran/interface.c b/gcc/fortran/interface.c index 75a50c9..8f041f0 100644 --- a/gcc/fortran/interface.c +++ b/gcc/fortran/interface.c @@ -5317,7 +5317,6 @@ gfc_get_formal_from_actual_arglist (gfc_symbol *sym, s->ts.is_iso_c = 0; s->ts.is_c_interop = 0; s->attr.flavor = FL_VARIABLE; - s->attr.artificial = 1; if (a->expr->rank > 0) { s->attr.dimension = 1; @@ -5332,6 +5331,7 @@ gfc_get_formal_from_actual_arglist (gfc_symbol *sym, s->maybe_array = maybe_dummy_array_arg (a->expr); } s->attr.dummy = 1; + s->attr.artificial = 1; s->declared_at = a->expr->where; s->attr.intent = INTENT_UNKNOWN; (*f)->sym = s; diff --git a/gcc/fortran/trans-decl.c b/gcc/fortran/trans-decl.c index e91a279..487e776 100644 --- a/gcc/fortran/trans-decl.c +++ b/gcc/fortran/trans-decl.c @@ -6072,7 +6072,7 @@ generate_local_decl (gfc_symbol * sym) /* Unused procedure passed as dummy argument. */ if (sym->attr.flavor == FL_PROCEDURE) { - if (!sym->attr.referenced) + if (!sym->attr.referenced && !sym->attr.artificial) { if (warn_unused_dummy_argument) gfc_warning (OPT_Wunused_dummy_argument, diff --git a/gcc/testsuite/gfortran.dg/warn_unused_dummy_argument_6.f90 b/gcc/testsuite/gfortran.dg/warn_unused_dummy_argument_6.f90 new file mode 100644 index 0000000..72f6d5c --- /dev/null +++ b/gcc/testsuite/gfortran.dg/warn_unused_dummy_argument_6.f90 @@ -0,0 +1,13 @@ +! { dg-do compile } +! { dg-options "-Wall" } +! PR 94270 - this used to give a bogus warning. +! Test case by Ignacio Fernández Galván. +subroutine foo() +external bar +call meh(bar) +call foo_internal() +contains + subroutine foo_internal() + call meh(bar) + end subroutine foo_internal +end subroutine foo |