This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [Patch, Fortran, OOP] PR 56261: seg fault call procedure pointer on polymorphic array


Janus Weil wrote:
Ok, here is an updated patch, which does the discussed checking for
procedure pointer assignments. For this I have introduced a new
function 'gfc_explicit_interface_required', which checks all the items
in F08:12.4.2.2 and is loosely based on the present checks in
'resolve_global_procedure' (which are replaced by the new function).

I hope the general idea of the patch is ok and the error messages are
sufficiently comprehensible.

Thanks for working on it. It looks mostly okay.

+	  snprintf (errmsg, err_len, "allocatable argument");
+	  return true;


You should use "strncpy" instead of "snprintf". (Unless, you want to append ' "%s", arg->sym->name'; however, in this context, the argument name does not really matter.) Additionally, please use _("...") to mark it for translation.


(I was thinking whether it misses BT_CLASS function results, but the check res->attr.pointer should be always true for (both allocatable or pointer) polymorphic types.


(I don't really like the wording, but I cannot come up with something better; especially not if it should remain translatable. With the patch one has:

Explicit interface required for 'sub' at (1): allocatable argument
Explicit interface required for 'sub' at (1): pointer or allocatable result
Explicit interface required for 'sub' at (1): pointer or allocatable result
Explicit interface required for 'sub' at (1): elemental procedure )


One leftover problem: The patch currently fails on the auto_char_len_4
test case

The patch is okay with the strncpy/_("...") issues fixed.

Regarding auto_char_len_4.f90: As written in previous email, I think we should add a diagnostic for the external declaration ("EXTERNAL, CHARACTER(len=<nonconst>", "PROCEDURE(CHARACTER(len=<nonconst>)" (also proc-pointer) in resolve_symbol.

I think the best way forward would be to change the declarations to use "len=n", add a dumy argument and adapt the call. For the follow-up patch, one can then create a new test case.

Tobias


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]