(j3.2006) procedure declaration and elementals
Fri Mar 13 18:15:52 EDT 2009
On Fri, 2009-03-13 at 11:44 -0700, Bill Long wrote:
> I got this test case:
> program f2003_procptr_1
> implicit none
> real :: pi = 3.14159265
> intrinsic :: sin, cos
> procedure(sin), pointer :: p => NULL ()
> p => sin
> print *, "sin(0), sin(pi/2) =", p(0.0), p(pi/2)
> p => cos
> print *, "cos(0), cos(pi) =", p(0.0), p(pi)
> end program f2003_procptr_1
> The procedure declaration statement appears to violate C1219
> (09-007:[291:26-27]). What is the rationale for this constraint? Is
> the code nonconforming?
C732 prohibits a <proc-target> to be a nonintrinsic elemental procedure.
184.108.40.206p3 says "<proc-target> may be an elemental intrinsic procedure
even if <proc-pointer-object> is not elemental.
Notwithstanding 220.127.116.11p3, it appears, however, that C1219 prohibits
elemental procedure pointers and elemental dummy procedures. I think
instead of "shall specify an external procedure" it should have been
"C1219 (R1215) If <proc-interface> describes an elemental procedure,
<proc-entity-name> shall not be a <dummy-arg-name>." There is nothing
similar, however, concerning interface bodies, i.e., nothing like
C1205a (R1205) An <interface-body> for a dummy procedure shall not
describe an elemental procedure interface."
While researching this, I came upon 18.104.22.168p5, which ends "...may be
associated with a dummy procedure (which is prohibited from being
I couldn't find where dummy procedures are prohibited from being
elemental (I looked at every occurrence of "elemental" in 09-007). I'm
confident we had something explicit at some time. I also looked through
04-007 and couldn't find it. If it actually has escaped, we need
"C1255a (R1230) A <dummy-argument-name> shall not be the name of an
elemental dummy procedure."
which would be better than saying it twice, in C1205a and C1219.
More information about the J3