[J3] Can a procedure pointer have character(*) result type?

Daniel C Chen cdchen at ca.ibm.com
Tue Nov 29 20:27:47 UTC 2022


Hi Vipul and Brad,
Thanks for the reply.

1. I understand the assumed-length function result is obsolescent.
2. the assumed-length dummy procedure is always allowed but it must be on external functions. (I.e. internal, module procedures are not allowed).

The question I have is regarding if a assumed-length dummy procedure pointer is allowed.

Vipul is right that I should have included an interface block in main for sub if I want to declare ‘proc’ as a dummy procedure pointer argument because it has the POINTER attribute.
However, the original question remains that if a declaration ‘character(*), external, pointer :: proc’ is legal to declare ‘proc’ to be a dummy procedure pointer.

I don’t see why it can’t. The call to sub(foo, cc) should work for both cases no matter if dummy argument ‘proc’ is a dummy procedure or dummy procedure pointer.

Thanks
Daniel

From: Vipul Parekh <parekhvs at gmail.com>
Sent: November 29, 2022 3:18 PM
To: General J3 interest list <j3 at mailman.j3-fortran.org>
Cc: Daniel C Chen <cdchen at ca.ibm.com>
Subject: [EXTERNAL] Re: [J3] Can a procedure pointer have character(*) result type?

On Tue, Nov 29, 2022 at 3: 01 PM Vipul Parekh <parekhvs@ gmail. com> wrote: .. Based on a quick glance at the standard, I think it still supports "Assumed character length functions" though it has marked them as obsolescent.   See
ZjQcmQRYFpfptBannerStart
This Message Is From an Untrusted Sender
You have not previously corresponded with this sender.
ZjQcmQRYFpfptBannerEnd


On Tue, Nov 29, 2022 at 3:01 PM Vipul Parekh <parekhvs at gmail.com<mailto:parekhvs at gmail.com>> wrote:
..
Based on a quick glance at the standard, I think it still supports "Assumed character length functions" though it has marked them as obsolescent.  See B.3.6 in 22-007 (WG5 N191, Dec. 2021) document. ..

Hello Daniel,

Forgot to add a sentence: I too couldn't find in the standard that might prohibit "Assumed character length functions" as dummy procedures.

Hi Brad,

What happens if you try the following with the NAG compiler?  Note the explicit interface for `sub`:
! File p.f90
   character(2) :: cc
   character(4), external :: foo
   interface
      subroutine sub(proc, arg)
         character(*) :: arg
         !character(*) :: proc                      !! This is OK
         character(*), external :: proc    !! Question: is this conforming?
      end
   end interface
   cc = "ab"
   call sub(foo, cc)
end

! File sub.f90
subroutine sub(proc, arg)
   character(*) :: arg
   !character(*) :: proc                      !! This is OK
   character(*), external :: proc    !! Question: is this conforming?
   print*, proc(arg)
end

! File foo.f90
function foo(arg)
   character(*) :: foo, arg
   foo = arg // "cd"
end function

I expect the resulting program to output '`abcd'.

Regards,
Vipul
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.j3-fortran.org/pipermail/j3/attachments/20221129/62b17521/attachment-0001.htm>


More information about the J3 mailing list