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).