]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR fortran/34689 (libgomp.fortran/appendix-a/a.33.3.f90 -O (test for excess...
authorTobias Burnus <burnus@net-b.de>
Sun, 6 Jan 2008 19:36:44 +0000 (20:36 +0100)
committerTobias Burnus <burnus@gcc.gnu.org>
Sun, 6 Jan 2008 19:36:44 +0000 (20:36 +0100)
2008-01-06  Tobias Burnus  <burnus@net-b.de>

       PR fortran/34689
       * interface.c (compare_actual_formal): Fix intent(out) check for
       function result variables.

2008-01-06  Tobias Burnus  <burnus@net-b.de>

       PR fortran/34689
       * gfortran.dg/intent_out_4.f90: New.

From-SVN: r131359

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

index 932527eadf8f0352575d8e037b1383ddbf4e09b7..09155e3f26a98be8135238d0078b133feb0da892 100644 (file)
@@ -1,3 +1,9 @@
+2008-01-06  Tobias Burnus  <burnus@net-b.de>
+
+       PR fortran/34689
+       * interface.c (compare_actual_formal): Fix intent(out) check for
+       function result variables.
+
 2008-01-06  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
 
        PR fortran/34387
index b900b102fe5e552d8c74ab28214e8993f12a34ff..8088fc65432162cbc9e29aeaa037e7909a95577a 100644 (file)
@@ -1909,7 +1909,8 @@ compare_actual_formal (gfc_actual_arglist **ap, gfc_formal_arglist *formal,
 
       /* Check intent = OUT/INOUT for definable actual argument.  */
       if ((a->expr->expr_type != EXPR_VARIABLE
-          || a->expr->symtree->n.sym->attr.flavor != FL_VARIABLE)
+          || (a->expr->symtree->n.sym->attr.flavor != FL_VARIABLE
+              && a->expr->symtree->n.sym->attr.flavor != FL_PROCEDURE))
          && (f->sym->attr.intent == INTENT_OUT
              || f->sym->attr.intent == INTENT_INOUT))
        {
index e0c426684d10ad5239441129d53ad0ea6f87dba9..1631fe900214695477b21a2ea59705a0acd56362 100644 (file)
@@ -1,3 +1,8 @@
+2008-01-06  Tobias Burnus  <burnus@net-b.de>
+
+       PR fortran/34689
+       * gfortran.dg/intent_out_4.f90: New.
+
 2008-01-06  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
 
        PR libfortran/34540
diff --git a/gcc/testsuite/gfortran.dg/intent_out_4.f90 b/gcc/testsuite/gfortran.dg/intent_out_4.f90
new file mode 100644 (file)
index 0000000..e34c452
--- /dev/null
@@ -0,0 +1,18 @@
+! { dg-do compile }
+!
+! PR fortran/34689
+!
+! The following (cf. libgomp.fortran/appendix-a/a.33.3.f90)
+! was rejected because the intent check missed a FL_FUNCTION
+! for the result variable.
+!
+function test()
+  implicit none
+  integer :: test
+  interface
+    subroutine foo(a)
+      integer(inout) :: a
+    end subroutine foo
+  end interface
+  call foo(a)
+end function test