http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58099

--- Comment #27 from Tobias Burnus <burnus at gcc dot gnu.org> ---
(In reply to Tobias Burnus from comment #26)
> A: "The specific intrinsic procedure itself retains the elemental property
> (so a reference using its own name can be elemental), but the dummy
> procedure or procedure pointer associated with it is not elemental and so
> cannot be used to reference the specific intrinsic procedure elementally."

Thus, the following code is invalid:

interface
  elemental real function x(y) ! Valid external procedure
     real, intent(in) :: y
  end function x
end interface
   ! pointer :: x  ! < comment aside: this proc-ptr would violate C1218
intrinsic :: sin
call foo(sin)
contains
  subroutine foo(z)
    procedure(x) :: z      ! INVALID per C1218
!   procedure(sin) :: z    ! Valid - but not elemental ...
    print *, z([1.,2.,3.]) ! ... hence this invalid too for "procedure(sin)::z"
  end subroutine foo
end


See also:

"12.5.2.9  Actual arguments associated with dummy procedure entities
[...]
If the interface of a dummy procedure is explicit, its characteristics as a
procedure (12.3.1) shall be the same as those of its effective argument, except
that a pure effective argument may be associated with a dummy argument
that is not pure and an elemental intrinsic actual procedure may be associated
with a dummy procedure (which cannot be elemental)."
[The parenthesis is a consequence of C1218, see comment 26 for the quote.]

Thus:
* I think we need a check for elemental as dummy argument and reject it
* For the patch (comment 18), I wonder whether whether one should leave out the
"elemental" assignment and just do the "pure" assignment.

Reply via email to