[Bug fortran/53694] [OOP] GENERIC type-bound procs should be available without part-ref syntax

2019-02-10 Thread dominiq at lps dot ens.fr
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53694

Dominique d'Humieres  changed:

   What|Removed |Added

 Status|WAITING |RESOLVED
 Resolution|--- |INVALID

--- Comment #10 from Dominique d'Humieres  ---
> More than three years ago Tobias Burnus wrote
>
> > Actually, I am no longer sure that this PR is valid - nor is Richard Maine
> > in c.l.f. Janus seems to have the same doubts, if I read comment 5 
> > correctly.
> >
> > The standard seems to make a distinction between 'generic type-bound 
> > procedure'
> > and 'generic procedure name'.

More that three years later without feedback I am closing this PR as INVALID.

[Bug fortran/53694] [OOP] GENERIC type-bound procs should be available without part-ref syntax

2015-11-04 Thread dominiq at lps dot ens.fr
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53694

Dominique d'Humieres  changed:

   What|Removed |Added

 Status|NEW |WAITING

--- Comment #9 from Dominique d'Humieres  ---
More than three years ago Tobias Burnus wrote

> Actually, I am no longer sure that this PR is valid - nor is Richard Maine
> in c.l.f. Janus seems to have the same doubts, if I read comment 5 correctly.
>
> The standard seems to make a distinction between 'generic type-bound 
> procedure'
> and 'generic procedure name'.

Any reason to keep this PR opened?

Note that the tests now fail with

Error: INTENT(OUT) argument 'a' of pure procedure 'scalar_equals_field' at (1)
may not be polymorphic

[Bug fortran/53694] [OOP] GENERIC type-bound procs should be available without part-ref syntax

2012-06-21 Thread burnus at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53694

--- Comment #8 from Tobias Burnus  2012-06-21 
14:39:32 UTC ---
Actually, I am no longer sure that this PR is valid - nor is Richard Maine in
c.l.f. Janus seems to have the same doubts, if I read comment 5 correctly.

The standard seems to make a distinction between 'generic type-bound procedure'
and 'generic procedure name'.


[Bug fortran/53694] [OOP] GENERIC type-bound procs should be available without part-ref syntax

2012-06-19 Thread janus at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53694

--- Comment #7 from janus at gcc dot gnu.org 2012-06-19 21:56:09 UTC ---
One problem with the patch in comment #6 is that it produces double error
messages for type-bound generics, e.g. on typebound_generic_{1,10,11}.


[Bug fortran/53694] [OOP] GENERIC type-bound procs should be available without part-ref syntax

2012-06-19 Thread janus at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53694

--- Comment #6 from janus at gcc dot gnu.org 2012-06-19 10:46:56 UTC ---
(In reply to comment #5)
> Btw, I'm not completely convinced yet that the code in comment #0 (and #4) is
> really legal.

In any case, here is a simple draft patch, which makes the code in comment 4
work (at least when the ONLY clause in the USE statement is removed):


Index: gcc/fortran/decl.c
===
--- gcc/fortran/decl.c(revision 188334)
+++ gcc/fortran/decl.c(working copy)
@@ -8374,12 +8374,20 @@ gfc_match_generic (void)
   {
 const bool is_op = (op_type == INTERFACE_USER_OP);
 gfc_symtree* st;
+gfc_symbol *gensym;

 st = gfc_new_symtree (is_op ? &ns->tb_uop_root : &ns->tb_sym_root,
   name);
 gcc_assert (st);
 st->n.tb = tb;

+/* Create non-typebound generic symbol.  */
+if (gfc_get_symbol (name, NULL, &gensym))
+  return MATCH_ERROR;
+if (!gensym->attr.generic
+&& gfc_add_generic (&gensym->attr, gensym->name, NULL) == FAILURE)
+  return MATCH_ERROR;
+
 break;
   }

Index: gcc/fortran/resolve.c
===
--- gcc/fortran/resolve.c(revision 188335)
+++ gcc/fortran/resolve.c(working copy)
@@ -11125,6 +11125,26 @@ specific_found:
 return FAILURE;
   }

+/* Add target to (non-typebound) generic symbol.  */
+if (!p->u.generic->is_operator)
+  {
+gfc_symbol *gensym;
+if (gfc_get_symbol (name, NULL, &gensym))
+  return FAILURE;
+if (gensym)
+  {
+gfc_interface *head, *intr;
+head = gensym->generic;
+intr = gfc_get_interface ();
+intr->sym = target->specific->u.specific->n.sym;
+intr->where = gfc_current_locus;
+intr->sym->declared_at = gfc_current_locus;
+intr->next = head;
+gensym->generic = intr;
+gfc_commit_symbol (gensym);
+  }
+  }
+
 /* Check those already resolved on this type directly.  */
 for (g = p->u.generic; g; g = g->next)
   if (g != target && g->specific


[Bug fortran/53694] [OOP] GENERIC type-bound procs should be available without part-ref syntax

2012-06-19 Thread janus at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53694

--- Comment #5 from janus at gcc dot gnu.org 2012-06-19 09:52:42 UTC ---
(In reply to comment #3)
> > > See also: 
> > > https://groups.google.com/forum/#!msg/comp.lang.fortran/YDt3j0--1Do
> > Note: That link does not seem to work.
> 
> Try:
> 
> http://www.rhinocerus.net/forum/lang-fortran/708232-there-way-do-following.html

The correct google groups link would be:

https://groups.google.com/forum/#!topic/comp.lang.fortran/YDt3j0--1Do


Btw, I'm not completely convinced yet that the code in comment #0 (and #4) is
really legal. No one in the c.l.f. thread has brought up a quote from the
standard which clearly shows that referencing a type-bound generic is legal
without part-ref syntax.


For me, to most convincing reference up to now is this quote from
F08:12.4.3.4.5 (though it still sounds a bit 'cloudy' to me):

NOTE 12.10
In most scoping units, the possible sources of procedures with a particular
generic identifier are the accessible interface blocks and the generic bindings
other than names for the accessible objects in that scoping unit.


[Bug fortran/53694] [OOP] GENERIC type-bound procs should be available without part-ref syntax

2012-06-17 Thread janus at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53694

janus at gcc dot gnu.org changed:

   What|Removed |Added

 Status|UNCONFIRMED |NEW
   Last reconfirmed||2012-06-17
 Ever Confirmed|0   |1

--- Comment #4 from janus at gcc dot gnu.org 2012-06-17 22:03:05 UTC ---
Slightly compactified test case:


module type_mod
  implicit none

  type field
 real :: var(1:3)
   contains
 procedure :: scalar_equals_field
 generic :: assignment (=) => scalar_equals_field
 procedure, nopass :: field_sqrt
 generic :: sqrt => field_sqrt
  end type

contains

  elemental pure subroutine scalar_equals_field (A, b)
class(field), intent(out) :: A
real, intent(in) :: b
A%var(:) = b
  end subroutine

  elemental pure function field_sqrt (A) result (B)
class(field), intent(in) :: A
type(field) :: B
B%var(:) = sqrt (A%var(:))
  end function

end module


program test
  use type_mod, only : field
  implicit none
  type(field) :: a

  a = 4.0
  print *, sqrt(a)

end program


[Bug fortran/53694] [OOP] GENERIC type-bound procs should be available without part-ref syntax

2012-06-17 Thread burnus at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53694

Tobias Burnus  changed:

   What|Removed |Added

 CC||burnus at gcc dot gnu.org

--- Comment #3 from Tobias Burnus  2012-06-17 
19:06:58 UTC ---
(In reply to comment #1)
> (In reply to comment #0)
> > See also: 
> > https://groups.google.com/forum/#!msg/comp.lang.fortran/YDt3j0--1Do
> Note: That link does not seem to work.

Try:

http://www.rhinocerus.net/forum/lang-fortran/708232-there-way-do-following.html


[Bug fortran/53694] [OOP] GENERIC type-bound procs should be available without part-ref syntax

2012-06-17 Thread janus at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53694

--- Comment #2 from janus at gcc dot gnu.org 2012-06-17 17:19:57 UTC ---
(In reply to comment #0)
> It is not obvious from the standard that this holds, but it is analog to
> ASSIGNMENT(=) and OPERATOR(...) which also act that way. [Which is supported 
> in
> gfortran.]

It is correct that gfortran supports this for ASSIGNMENTs and OPERATORs.
However, there are problems, cf. PR 41951 comment 6 to 10.

The two PRs might be fixable in one go.


[Bug fortran/53694] [OOP] GENERIC type-bound procs should be available without part-ref syntax

2012-06-17 Thread janus at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53694

janus at gcc dot gnu.org changed:

   What|Removed |Added

 CC||janus at gcc dot gnu.org

--- Comment #1 from janus at gcc dot gnu.org 2012-06-17 08:52:44 UTC ---
(In reply to comment #0)
> See also: https://groups.google.com/forum/#!msg/comp.lang.fortran/YDt3j0--1Do

Note: That link does not seem to work.