public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug fortran/40453] [F95] Enhanced (recursive) argument checking
       [not found] <bug-40453-4@http.gcc.gnu.org/bugzilla/>
@ 2012-10-06 14:40 ` janus at gcc dot gnu.org
  2012-10-06 14:44 ` janus at gcc dot gnu.org
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 6+ messages in thread
From: janus at gcc dot gnu.org @ 2012-10-06 14:40 UTC (permalink / raw)
  To: gcc-bugs


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40453

janus at gcc dot gnu.org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
            Summary|Enhanced argument checking: |[F95] Enhanced (recursive)
                   |                            |argument checking

--- Comment #1 from janus at gcc dot gnu.org 2012-10-06 14:39:48 UTC ---
(In reply to comment #0)
> I think some other checks should still be added, e.g.
> 
> a) PUREness check (see example below); passing/assigning
>    a pure to a non-pure dummy/proc-pointer is OK; doing vice versa
>    is not.
> 
> [...]
> 
> b) Similarly for ELEMENTAL. For proc-pointer assignments, use the
>    first example with PURE changed to ELEMENTAL. That non-intrinsic
>    elementals are not allowed as actual argument, is already checked
>    for (cf. C1228). Except of the remark in parentheses I could not
>    find in F2003/F2008 anything which prohibits ELEMENTAL for the
>    dummy argument; however, the parentheses is normative. Maybe one
>    should re-check the standard before adding an error check (see
>    example below).

Both checks for PURE and ELEMENTAL have been implemented in r179080 for
PR41733.


> c) One needs to go recursively over the arguments as the second
>    example below shows.
> 
> [...] 
>
> program RecursiveInterface
>   interface
>     subroutine a(x)
>       real :: x
>     end subroutine a
>     subroutine b(a)
>       integer :: a
>     end subroutine b
>     subroutine c(f)
>       procedure(a) :: f
>     end subroutine c
>     subroutine d(f)
>       procedure(b) :: f
>     end subroutine d
>     subroutine e(f)
>      procedure(c) :: f
>     end subroutine e
>   end interface
>   call e(d) ! Argument (dummy subroutine) d has an integer argument
>             ! but e's f expects a real argument
> end program RecursiveInterface

In fact this is still accepted without error.


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Bug fortran/40453] [F95] Enhanced (recursive) argument checking
       [not found] <bug-40453-4@http.gcc.gnu.org/bugzilla/>
  2012-10-06 14:40 ` [Bug fortran/40453] [F95] Enhanced (recursive) argument checking janus at gcc dot gnu.org
@ 2012-10-06 14:44 ` janus at gcc dot gnu.org
  2012-10-06 21:04 ` janus at gcc dot gnu.org
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 6+ messages in thread
From: janus at gcc dot gnu.org @ 2012-10-06 14:44 UTC (permalink / raw)
  To: gcc-bugs


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40453

--- Comment #2 from janus at gcc dot gnu.org 2012-10-06 14:44:07 UTC ---
Slightly reworked example, which I hope is a bit easier to grasp:


program RecursiveInterface

  call c(b2) ! b2's argument a2 has an integer argument,
             ! but c expects a routine like b1 with an argument a1
             ! with real argument

 contains

    subroutine a1(x)
      real :: x
    end subroutine

    subroutine a2(i)
      integer :: i
    end subroutine

    !!!!!!!!!!!!!!!

    subroutine b1(f)
      procedure(a1) :: f
    end subroutine

    subroutine b2(f)
      procedure(a2) :: f
    end subroutine

    !!!!!!!!!!!!!!!

    subroutine c(f)
     procedure(b1) :: f
    end subroutine e

end


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Bug fortran/40453] [F95] Enhanced (recursive) argument checking
       [not found] <bug-40453-4@http.gcc.gnu.org/bugzilla/>
  2012-10-06 14:40 ` [Bug fortran/40453] [F95] Enhanced (recursive) argument checking janus at gcc dot gnu.org
  2012-10-06 14:44 ` janus at gcc dot gnu.org
@ 2012-10-06 21:04 ` janus at gcc dot gnu.org
  2012-10-06 21:49 ` janus at gcc dot gnu.org
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 6+ messages in thread
From: janus at gcc dot gnu.org @ 2012-10-06 21:04 UTC (permalink / raw)
  To: gcc-bugs


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40453

janus at gcc dot gnu.org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|diagnostic                  |accepts-invalid
             Status|NEW                         |ASSIGNED
         AssignedTo|unassigned at gcc dot       |janus at gcc dot gnu.org
                   |gnu.org                     |

--- Comment #3 from janus at gcc dot gnu.org 2012-10-06 21:04:31 UTC ---
Here is a draft patch:

Index: gcc/fortran/interface.c
===================================================================
--- gcc/fortran/interface.c    (revision 192159)
+++ gcc/fortran/interface.c    (working copy)
@@ -1063,6 +1063,19 @@ check_dummy_characteristics (gfc_symbol *s1, gfc_s
   /* FIXME: Do more comprehensive testing of attributes, like e.g.
         ASYNCHRONOUS, CONTIGUOUS, VALUE, VOLATILE, etc.  */

+  /* Check interface of dummy procedures.  */
+  if (s1->attr.flavor == FL_PROCEDURE)
+    {
+      char err[200];
+      if (!gfc_compare_interfaces (s1, s2, s2->name, 0, 1, err, sizeof(err),
+                   NULL, NULL))
+    {
+      snprintf (errmsg, err_len, "Interface mismatch in dummy procedure "
+            "'%s': %s", s1->name, err);
+      return FAILURE;
+    }
+    }
+
   /* Check string length.  */
   if (s1->ts.type == BT_CHARACTER
       && s1->ts.u.cl && s1->ts.u.cl->length


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Bug fortran/40453] [F95] Enhanced (recursive) argument checking
       [not found] <bug-40453-4@http.gcc.gnu.org/bugzilla/>
                   ` (2 preceding siblings ...)
  2012-10-06 21:04 ` janus at gcc dot gnu.org
@ 2012-10-06 21:49 ` janus at gcc dot gnu.org
  2012-10-12  8:17 ` janus at gcc dot gnu.org
  2012-10-12  8:21 ` janus at gcc dot gnu.org
  5 siblings, 0 replies; 6+ messages in thread
From: janus at gcc dot gnu.org @ 2012-10-06 21:49 UTC (permalink / raw)
  To: gcc-bugs


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40453

--- Comment #4 from janus at gcc dot gnu.org 2012-10-06 21:49:37 UTC ---
(In reply to comment #3)
> Here is a draft patch:

... which regtests cleanly.


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Bug fortran/40453] [F95] Enhanced (recursive) argument checking
       [not found] <bug-40453-4@http.gcc.gnu.org/bugzilla/>
                   ` (3 preceding siblings ...)
  2012-10-06 21:49 ` janus at gcc dot gnu.org
@ 2012-10-12  8:17 ` janus at gcc dot gnu.org
  2012-10-12  8:21 ` janus at gcc dot gnu.org
  5 siblings, 0 replies; 6+ messages in thread
From: janus at gcc dot gnu.org @ 2012-10-12  8:17 UTC (permalink / raw)
  To: gcc-bugs


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40453

--- Comment #5 from janus at gcc dot gnu.org 2012-10-12 08:16:37 UTC ---
Author: janus
Date: Fri Oct 12 08:16:17 2012
New Revision: 192391

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=192391
Log:
2012-10-12  Janus Weil  <janus@gcc.gnu.org>

    PR fortran/40453
    * interface.c (check_dummy_characteristics): Recursively check dummy
    procedures.

2012-10-12  Janus Weil  <janus@gcc.gnu.org>

    PR fortran/40453
    * gfortran.dg/dummy_procedure_9.f90: New.

Added:
    trunk/gcc/testsuite/gfortran.dg/dummy_procedure_9.f90
Modified:
    trunk/gcc/fortran/ChangeLog
    trunk/gcc/fortran/interface.c
    trunk/gcc/testsuite/ChangeLog


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Bug fortran/40453] [F95] Enhanced (recursive) argument checking
       [not found] <bug-40453-4@http.gcc.gnu.org/bugzilla/>
                   ` (4 preceding siblings ...)
  2012-10-12  8:17 ` janus at gcc dot gnu.org
@ 2012-10-12  8:21 ` janus at gcc dot gnu.org
  5 siblings, 0 replies; 6+ messages in thread
From: janus at gcc dot gnu.org @ 2012-10-12  8:21 UTC (permalink / raw)
  To: gcc-bugs


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40453

janus at gcc dot gnu.org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|ASSIGNED                    |RESOLVED
         Resolution|                            |FIXED

--- Comment #6 from janus at gcc dot gnu.org 2012-10-12 08:21:12 UTC ---
Fixed with r192391. Closing.


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2012-10-12  8:21 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <bug-40453-4@http.gcc.gnu.org/bugzilla/>
2012-10-06 14:40 ` [Bug fortran/40453] [F95] Enhanced (recursive) argument checking janus at gcc dot gnu.org
2012-10-06 14:44 ` janus at gcc dot gnu.org
2012-10-06 21:04 ` janus at gcc dot gnu.org
2012-10-06 21:49 ` janus at gcc dot gnu.org
2012-10-12  8:17 ` janus at gcc dot gnu.org
2012-10-12  8:21 ` janus at gcc dot gnu.org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).