Found while looking at PR 39997. The following is not checked. The reason is
that the check contains:

  if (rvalue->expr_type == EXPR_VARIABLE

while the example has EXPR_FUNCTION


program test
  procedure(real), pointer :: p
  p => f()  ! << Invalid f() returns a LOGICAL(1) function, but p is a REAL one
contains
 function f()
   pointer :: f
   interface
     logical(1) function f()
     end function
   end interface
   f = .true._1
 end function f
end program test

 * * *

Maybe PR 39997 (comment 3) item 3 can be fixed at the same time. One needs just
to add:
  If( RHS is a function && LHS is untyped) {
    implicitly type proc pointer on the LHS
  }
before the subroutine/function check is done.


-- 
           Summary: Assignment checking for  proc-pointer => proc-ptr-
                    returning-function()
           Product: gcc
           Version: 4.5.0
            Status: UNCONFIRMED
          Keywords: accepts-invalid
          Severity: normal
          Priority: P3
         Component: fortran
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: burnus at gcc dot gnu dot org


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

Reply via email to