This is the mail archive of the 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: 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.


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