public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug fortran/46662] New: [OOP] gfortran rejects   CALL polymorphic%abstract_type%tbp()
@ 2010-11-25 18:14 burnus at gcc dot gnu.org
  2010-11-25 18:26 ` [Bug fortran/46662] " burnus at gcc dot gnu.org
                   ` (8 more replies)
  0 siblings, 9 replies; 10+ messages in thread
From: burnus at gcc dot gnu.org @ 2010-11-25 18:14 UTC (permalink / raw)
  To: gcc-bugs

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

           Summary: [OOP] gfortran rejects   CALL
                    polymorphic%abstract_type%tbp()
           Product: gcc
           Version: 4.6.0
            Status: UNCONFIRMED
          Keywords: rejects-valid
          Severity: normal
          Priority: P3
         Component: fortran
        AssignedTo: unassigned@gcc.gnu.org
        ReportedBy: burnus@gcc.gnu.org
                CC: sfilippone@uniroma2.it, janus@gcc.gnu.org


Tracking - not yet clear whether gfortran mishandles it.

Reported by salvatore at c.l.f,
http://groups.google.com/group/comp.lang.fortran/browse_thread/thread/a0857fa4a692d518#

gfortran currently rejects:

 CALL polymorphic%abstract_type%tbp()

Which seems to be valid according to the quotes from the standard (see below).
However, if it is valid, I fail to find a restriction prohibiting a call to a
deferred TBP, which has to be invalid.


R1220 call-stmt is CALL procedure-designator [ ( [ actual-arg-spec-list ] ) ]
R1221 procedure-designator is procedure-name
                           or proc-component-ref
                           or data-ref % binding-name

R611 data-ref is part-ref [ % part-ref ] ...
R612 part-ref is part-name [ ( section-subscript-list ) ] [ image-selector ]

C611 (R611) If the rightmost part-name is of abstract type, data-ref shall be
polymorphic.


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

* [Bug fortran/46662] [OOP] gfortran rejects   CALL polymorphic%abstract_type%tbp()
  2010-11-25 18:14 [Bug fortran/46662] New: [OOP] gfortran rejects CALL polymorphic%abstract_type%tbp() burnus at gcc dot gnu.org
@ 2010-11-25 18:26 ` burnus at gcc dot gnu.org
  2010-11-25 18:49 ` burnus at gcc dot gnu.org
                   ` (7 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: burnus at gcc dot gnu.org @ 2010-11-25 18:26 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #1 from Tobias Burnus <burnus at gcc dot gnu.org> 2010-11-25 18:08:45 UTC ---
Asked at J3: http://j3-fortran.org/pipermail/j3/2010-November/004015.html


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

* [Bug fortran/46662] [OOP] gfortran rejects   CALL polymorphic%abstract_type%tbp()
  2010-11-25 18:14 [Bug fortran/46662] New: [OOP] gfortran rejects CALL polymorphic%abstract_type%tbp() burnus at gcc dot gnu.org
  2010-11-25 18:26 ` [Bug fortran/46662] " burnus at gcc dot gnu.org
@ 2010-11-25 18:49 ` burnus at gcc dot gnu.org
  2010-11-26  8:50 ` burnus at gcc dot gnu.org
                   ` (6 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: burnus at gcc dot gnu.org @ 2010-11-25 18:49 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #2 from Tobias Burnus <burnus at gcc dot gnu.org> 2010-11-25 18:14:23 UTC ---
Some data points: gfortran 4.6 and NAG 5.2 reject the program; Crayftn accepts
the program - but it also accepts the program with a deferred TBP - and ICEs.


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

* [Bug fortran/46662] [OOP] gfortran rejects   CALL polymorphic%abstract_type%tbp()
  2010-11-25 18:14 [Bug fortran/46662] New: [OOP] gfortran rejects CALL polymorphic%abstract_type%tbp() burnus at gcc dot gnu.org
  2010-11-25 18:26 ` [Bug fortran/46662] " burnus at gcc dot gnu.org
  2010-11-25 18:49 ` burnus at gcc dot gnu.org
@ 2010-11-26  8:50 ` burnus at gcc dot gnu.org
  2010-11-26 14:29 ` [Bug fortran/46662] [OOP] gfortran rejects CALL polymorphic%abstract_type%ppc() burnus at gcc dot gnu.org
                   ` (5 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: burnus at gcc dot gnu.org @ 2010-11-26  8:50 UTC (permalink / raw)
  To: gcc-bugs

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

Tobias Burnus <burnus at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |RESOLVED
         Resolution|                            |INVALID

--- Comment #3 from Tobias Burnus <burnus at gcc dot gnu.org> 2010-11-26 08:08:44 UTC ---
> C611 (R611) If the rightmost part-name is of abstract type, data-ref shall be
> polymorphic.

That's the key point, which makes it invalid. To quote from Malcolm Cohen's
answer:

"In your example, the "data-ref" is "polymorphic%abstract".
 You said that "abstract" was of abstract type.
 And "polymorphic%abstract" certainly is not polymorphic -
 you have selected the bit that is of type "abstract"."

Hence, the PR is invalid as gfortran and NAG properly diagnose it :-)


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

* [Bug fortran/46662] [OOP] gfortran rejects   CALL polymorphic%abstract_type%ppc()
  2010-11-25 18:14 [Bug fortran/46662] New: [OOP] gfortran rejects CALL polymorphic%abstract_type%tbp() burnus at gcc dot gnu.org
                   ` (2 preceding siblings ...)
  2010-11-26  8:50 ` burnus at gcc dot gnu.org
@ 2010-11-26 14:29 ` burnus at gcc dot gnu.org
  2010-11-26 16:08 ` burnus at gcc dot gnu.org
                   ` (4 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: burnus at gcc dot gnu.org @ 2010-11-26 14:29 UTC (permalink / raw)
  To: gcc-bugs

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

Tobias Burnus <burnus at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|RESOLVED                    |UNCONFIRMED
         Resolution|INVALID                     |
            Summary|[OOP] gfortran rejects      |[OOP] gfortran rejects
                   |CALL                        |CALL
                   |polymorphic%abstract_type%t |polymorphic%abstract_type%p
                   |bp()                        |pc()

--- Comment #4 from Tobias Burnus <burnus at gcc dot gnu.org> 2010-11-26 14:02:41 UTC ---
REOPEN:

As Wolfgang Kilian mentions in the c.l.f thread (cf. link in comment 0):
While gfortran rejects TBP, it accepts PPC (proc pointer components)

  CALL polymorphic%abstract_type%PPC()

The same arguments should hold for those, which means that they should be
rejected.


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

* [Bug fortran/46662] [OOP] gfortran rejects   CALL polymorphic%abstract_type%ppc()
  2010-11-25 18:14 [Bug fortran/46662] New: [OOP] gfortran rejects CALL polymorphic%abstract_type%tbp() burnus at gcc dot gnu.org
                   ` (3 preceding siblings ...)
  2010-11-26 14:29 ` [Bug fortran/46662] [OOP] gfortran rejects CALL polymorphic%abstract_type%ppc() burnus at gcc dot gnu.org
@ 2010-11-26 16:08 ` burnus at gcc dot gnu.org
  2010-11-27 12:10 ` [Bug fortran/46662] [OOP] gfortran accepts "CALL polymorphic%abstract_type%ppc()" janus at gcc dot gnu.org
                   ` (3 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: burnus at gcc dot gnu.org @ 2010-11-26 16:08 UTC (permalink / raw)
  To: gcc-bugs

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

Tobias Burnus <burnus at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2010.11.26 16:01:20
     Ever Confirmed|0                           |1

--- Comment #5 from Tobias Burnus <burnus at gcc dot gnu.org> 2010-11-26 16:01:20 UTC ---
(In reply to comment #4)
> While gfortran rejects TBP, it accepts PPC (proc pointer components)
>
>   CALL polymorphic%abstract_type%PPC()

To make it a bit clearer:

R1221 procedure-designator is ... or proc-component-ref or ...
R739  proc-component-ref is scalar-variable % procedure-component-name

where "variable" can be a "designator" which can be a "structure-component"
which is a "data-ref". Thus, we are back at C611 which tells that the
right-most part-ref (here: "abstract-type") must not be both abstract and
not-polymorphic.


For TBP the check is done in resolve.c's check_typebound_baseobject; for PPC
the check should be added at update_ppc_arglist -- few lines up.


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

* [Bug fortran/46662] [OOP] gfortran accepts "CALL polymorphic%abstract_type%ppc()"
  2010-11-25 18:14 [Bug fortran/46662] New: [OOP] gfortran rejects CALL polymorphic%abstract_type%tbp() burnus at gcc dot gnu.org
                   ` (4 preceding siblings ...)
  2010-11-26 16:08 ` burnus at gcc dot gnu.org
@ 2010-11-27 12:10 ` janus at gcc dot gnu.org
  2010-11-28 19:32 ` janus at gcc dot gnu.org
                   ` (2 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: janus at gcc dot gnu.org @ 2010-11-27 12:10 UTC (permalink / raw)
  To: gcc-bugs

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

janus at gcc dot gnu.org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |ASSIGNED
         AssignedTo|unassigned at gcc dot       |janus at gcc dot gnu.org
                   |gnu.org                     |
            Summary|[OOP] gfortran rejects      |[OOP] gfortran accepts
                   |CALL                        |"CALL
                   |polymorphic%abstract_type%p |polymorphic%abstract_type%p
                   |pc()                        |pc()"

--- Comment #6 from janus at gcc dot gnu.org 2010-11-27 10:51:47 UTC ---
(In reply to comment #5)
> For TBP the check is done in resolve.c's check_typebound_baseobject; for PPC
> the check should be added at update_ppc_arglist -- few lines up.

Right. I'll take care of it ...


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

* [Bug fortran/46662] [OOP] gfortran accepts "CALL polymorphic%abstract_type%ppc()"
  2010-11-25 18:14 [Bug fortran/46662] New: [OOP] gfortran rejects CALL polymorphic%abstract_type%tbp() burnus at gcc dot gnu.org
                   ` (5 preceding siblings ...)
  2010-11-27 12:10 ` [Bug fortran/46662] [OOP] gfortran accepts "CALL polymorphic%abstract_type%ppc()" janus at gcc dot gnu.org
@ 2010-11-28 19:32 ` janus at gcc dot gnu.org
  2010-11-28 20:42 ` janus at gcc dot gnu.org
  2010-11-28 20:45 ` janus at gcc dot gnu.org
  8 siblings, 0 replies; 10+ messages in thread
From: janus at gcc dot gnu.org @ 2010-11-28 19:32 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #7 from janus at gcc dot gnu.org 2010-11-28 18:37:58 UTC ---
I will commit the following patch as obvious:

Index: gcc/fortran/resolve.c
===================================================================
--- gcc/fortran/resolve.c    (revision 167218)
+++ gcc/fortran/resolve.c    (working copy)
@@ -5389,6 +5389,14 @@ update_ppc_arglist (gfc_expr* e)
       return FAILURE;
     }

+  /* F08:C611.  */
+  if (po->ts.type == BT_DERIVED && po->ts.u.derived->attr.abstract)
+    {
+      gfc_error ("Base object for procedure-pointer component call at %L is
of"
+         " ABSTRACT type '%s'", &e->where, po->ts.u.derived->name);
+      return FAILURE;
+    }
+
   gcc_assert (tb->pass_arg_num > 0);
   e->value.compcall.actual = update_arglist_pass (e->value.compcall.actual,
po,
                           tb->pass_arg_num,


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

* [Bug fortran/46662] [OOP] gfortran accepts "CALL polymorphic%abstract_type%ppc()"
  2010-11-25 18:14 [Bug fortran/46662] New: [OOP] gfortran rejects CALL polymorphic%abstract_type%tbp() burnus at gcc dot gnu.org
                   ` (6 preceding siblings ...)
  2010-11-28 19:32 ` janus at gcc dot gnu.org
@ 2010-11-28 20:42 ` janus at gcc dot gnu.org
  2010-11-28 20:45 ` janus at gcc dot gnu.org
  8 siblings, 0 replies; 10+ messages in thread
From: janus at gcc dot gnu.org @ 2010-11-28 20:42 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #8 from janus at gcc dot gnu.org 2010-11-28 20:22:32 UTC ---
Author: janus
Date: Sun Nov 28 20:22:29 2010
New Revision: 167225

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=167225
Log:
2010-11-28  Janus Weil  <janus@gcc.gnu.org>

    PR fortran/46662
    * resolve.c (update_ppc_arglist): Add check for abstract passed object.

2010-11-28  Janus Weil  <janus@gcc.gnu.org>

    PR fortran/46662
    * gfortran.dg/proc_ptr_comp_pass_7.f90: New.

Added:
    trunk/gcc/testsuite/gfortran.dg/proc_ptr_comp_pass_7.f90
Modified:
    trunk/gcc/fortran/ChangeLog
    trunk/gcc/fortran/resolve.c
    trunk/gcc/testsuite/ChangeLog


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

* [Bug fortran/46662] [OOP] gfortran accepts "CALL polymorphic%abstract_type%ppc()"
  2010-11-25 18:14 [Bug fortran/46662] New: [OOP] gfortran rejects CALL polymorphic%abstract_type%tbp() burnus at gcc dot gnu.org
                   ` (7 preceding siblings ...)
  2010-11-28 20:42 ` janus at gcc dot gnu.org
@ 2010-11-28 20:45 ` janus at gcc dot gnu.org
  8 siblings, 0 replies; 10+ messages in thread
From: janus at gcc dot gnu.org @ 2010-11-28 20:45 UTC (permalink / raw)
  To: gcc-bugs

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

janus at gcc dot gnu.org changed:

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

--- Comment #9 from janus at gcc dot gnu.org 2010-11-28 20:33:53 UTC ---
Fixed with r167225. Closing.


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

end of thread, other threads:[~2010-11-28 20:34 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-11-25 18:14 [Bug fortran/46662] New: [OOP] gfortran rejects CALL polymorphic%abstract_type%tbp() burnus at gcc dot gnu.org
2010-11-25 18:26 ` [Bug fortran/46662] " burnus at gcc dot gnu.org
2010-11-25 18:49 ` burnus at gcc dot gnu.org
2010-11-26  8:50 ` burnus at gcc dot gnu.org
2010-11-26 14:29 ` [Bug fortran/46662] [OOP] gfortran rejects CALL polymorphic%abstract_type%ppc() burnus at gcc dot gnu.org
2010-11-26 16:08 ` burnus at gcc dot gnu.org
2010-11-27 12:10 ` [Bug fortran/46662] [OOP] gfortran accepts "CALL polymorphic%abstract_type%ppc()" janus at gcc dot gnu.org
2010-11-28 19:32 ` janus at gcc dot gnu.org
2010-11-28 20:42 ` janus at gcc dot gnu.org
2010-11-28 20:45 ` 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).