https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111503

            Bug ID: 111503
           Summary: Issues with POINTER, OPTIONAL, CONTIGUOUS dummy
                    arguments
           Product: gcc
           Version: 14.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: fortran
          Assignee: unassigned at gcc dot gnu.org
          Reporter: anlauf at gcc dot gnu.org
  Target Milestone: ---

The following code shows an issue that popped up while looking at pr55978:

program test
  implicit none
  integer, pointer, contiguous :: p(:) => null()
  print *, is_contiguous (p)
  call one (p)       ! accepted
  call one ()        ! accepted (but see pr55978 comment#19)
  call one (null())  ! rejected, but accepted by NAG, Intel
  call one (null(p)) ! rejected by NAG, accepted by Intel
contains
  subroutine one (x)
    integer, pointer, optional, contiguous, intent(in) :: x(:)
!   integer,          optional, contiguous, intent(in) :: x(:) ! accepted
  end subroutine one
end

Intel accepts the code as-is.  NAG complains that NULL(p) is not contiguous:

Error: pr11xxxx.f90, line 8: Argument X (no. 1) of ONE is a CONTIGUOUS pointer,
but the actual argument NULL(P) is not simply contiguous

I guess that NAG is correct here, and Intel does not properly diagnose.

gfortran is maybe overly "cautious" and gives:

pr11xxxx.f90:7:12:

    7 |   call one (null())  ! rejected, but accepted by NAG, Intel
      |            1
Error: Actual argument to contiguous pointer dummy 'x' at (1) must be simply
contiguous
pr11xxxx.f90:8:12:

    8 |   call one (null(p)) ! rejected by NAG, accepted by Intel
      |            1
Error: Actual argument to contiguous pointer dummy 'x' at (1) must be simply
contiguous

As - in the current context - null() is equivalent to an absent actual
argument, I wonder whether we should relax our checks and follow NAG and Intel.

Reply via email to