re PR fortran/30235 ([4.1 only] missing alternate return argument with explicit inter...
authorBrooks Moses <brooks.moses@codesourcery.com>
Thu, 4 Jan 2007 17:30:37 +0000 (17:30 +0000)
committerBrooks Moses <brooks@gcc.gnu.org>
Thu, 4 Jan 2007 17:30:37 +0000 (09:30 -0800)
fortran/
PR 30235
* interface.c (compare_actual_formal): check for
alternate returns when iterating over non-present
arguments.

testsuite/
PR 30235
* gfortran.dg/altreturn_2.f90: new test.

From-SVN: r120447

gcc/fortran/ChangeLog
gcc/fortran/interface.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/altreturn_2.f90 [new file with mode: 0755]

index ced91a87b65daf1d78ac0c348f7e5c2cdf60c7f2..2333b821c3f450ab8146f156eafb7570ac1a52a6 100644 (file)
@@ -1,3 +1,10 @@
+2007-01-04  Brooks Moses  <brooks.moses@codesourcery.com>
+
+       PR 30235
+       * interface.c (compare_actual_formal): check for
+       alternate returns when iterating over non-present
+       arguments.
+
 2007-01-04  Brooks Moses  <brooks.moses@codesourcery.com>
 
        * invoke.texi: Update manpage copyright to include 2007.
index dd1ac694521b581e0b973f41de2b3d1632576c77..7b0c4231b0e1d718e6811c6ea666c79c03374f85 100644 (file)
@@ -1455,6 +1455,13 @@ compare_actual_formal (gfc_actual_arglist ** ap,
     {
       if (new[i] != NULL)
        continue;
+      if (f->sym == NULL)
+       {
+         if (where)
+           gfc_error ("Missing alternate return spec in subroutine call at %L",
+                      where);
+         return 0;
+       }
       if (!f->sym->attr.optional)
        {
          if (where)
index 0663f79bb8e5fb8a9517e57eb542c62ec0fad1f9..0309fad98f507319c37a718f558d3c4016b83cf6 100644 (file)
@@ -1,3 +1,8 @@
+2006-01-04  Brooks Moses  <brooks.moses@codesourcery.com>
+
+       PR 30235
+       * gfortran.dg/altreturn_2.f90: new test.
+
 2007-01-04  Tom Tromey  <tromey@redhat.com>
 
        PR preprocessor/28165:
diff --git a/gcc/testsuite/gfortran.dg/altreturn_2.f90 b/gcc/testsuite/gfortran.dg/altreturn_2.f90
new file mode 100755 (executable)
index 0000000..d0556d0
--- /dev/null
@@ -0,0 +1,8 @@
+! { dg-do compile }
+       program altreturn_2
+         call foo()  ! { dg-error "Missing alternate return" }
+       contains
+         subroutine foo(*)
+           return
+         end subroutine
+       end program