Fix PR 94270 by not warning about artifical dummy arguments.
authorThomas König <tkoenig@gcc.gnu.org>
Tue, 14 Apr 2020 11:50:51 +0000 (13:50 +0200)
committerThomas König <tkoenig@gcc.gnu.org>
Tue, 14 Apr 2020 11:50:51 +0000 (13:50 +0200)
2020-04-14  Thomas Koenig  <tkoenig@gcc.gnu.org>

PR fortran/94270
* interface.c (gfc_get_formal_from_actual_arglist): Always
set artificial attribute for symbols.
* trans-decl.c (generate_local_decl): Do not warn if the
symbol is artifical.

2020-04-14  Thomas Koenig  <tkoenig@gcc.gnu.org>

PR fortran/94270
* gfortran.dg/warn_unused_dummy_argument_6.f90: New test.

gcc/fortran/interface.c
gcc/fortran/trans-decl.c
gcc/testsuite/gfortran.dg/warn_unused_dummy_argument_6.f90 [new file with mode: 0644]

index 75a50c9..8f041f0 100644 (file)
@@ -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;
index e91a279..487e776 100644 (file)
@@ -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 (file)
index 0000000..72f6d5c
--- /dev/null
@@ -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