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

             Bug #: 53956
           Summary: Proc-pointer w/ interface: Bogus "EXTERNAL attribute
                    conflicts with FUNCTION attribute"
    Classification: Unclassified
           Product: gcc
           Version: 4.8.0
            Status: UNCONFIRMED
          Keywords: rejects-valid
          Severity: normal
          Priority: P3
         Component: fortran
        AssignedTo: unassig...@gcc.gnu.org
        ReportedBy: bur...@gcc.gnu.org
                CC: ja...@gcc.gnu.org


Found at comp.lang.fortran,
cf. http://www.rhinocerus.net/forum/lang-fortran/709699-sort-2d-matrix-2.html
or
https://groups.google.com/forum/?fromgroups#!topic/comp.lang.fortran/kfOR7y1bI0Q

The original example has been written by James Van Buskirk - see thread.

The following program gives the bogus error when the procedure pointer is
invoked. Without procedure pointer or - for the dummy argument - using
"procedure(integer)" instead of "integer, external" (which is semantically
identically), works.

program testme
              1   
Error: EXTERNAL attribute conflicts with FUNCTION attribute in 'comparator2' at
(1)


module m
contains
  function compare()
    integer :: compare
    compare = 42
  end function compare
  subroutine print_it(x)
    procedure(integer) :: x
    print *, x()
  end subroutine print_it
end module m

program testme
  use m
  implicit none
  interface
    subroutine sub(comparator2)        ! <<< related to those
      integer, external :: comparator2 ! <<< lines
    end subroutine sub
  end interface
  procedure(sub), pointer :: fp  ! << but the interface might be involved
  fp => print_it
  call fp (compare)   ! <<< Triggers the error
end program testme

Reply via email to