xref: /llvm-project/flang/test/Semantics/call31.f90 (revision 1c91d9bdea3b6c38e8fbce46ec8181a9c0aa26f8)
1*1c91d9bdSPeter Klausler! RUN: %python %S/test_errors.py %s %flang_fc1 -pedantic
27fdd0c00SKelvin Li! Confirm enforcement of constraint C723 in F2018 for procedure pointers
37fdd0c00SKelvin Li
47fdd0c00SKelvin Li      module m
57fdd0c00SKelvin Li       contains
67fdd0c00SKelvin Li        subroutine subr(parg)
73077d614SPeter Klausler          !PORTABILITY: A dummy procedure pointer should not have assumed-length CHARACTER(*) result type
87fdd0c00SKelvin Li          procedure(character(*)), pointer :: parg
941a964cfSPeter Klausler          !ERROR: An assumed (*) type parameter may be used only for a (non-statement function) dummy argument, associate name, character named constant, or external function result
107fdd0c00SKelvin Li          procedure(character(*)), pointer :: plocal
117fdd0c00SKelvin Li          print *, parg()
127fdd0c00SKelvin Li          plocal => parg
137fdd0c00SKelvin Li          call subr_1(plocal)
147fdd0c00SKelvin Li        end subroutine
157fdd0c00SKelvin Li
167fdd0c00SKelvin Li        subroutine subr_1(parg_1)
173077d614SPeter Klausler          !PORTABILITY: A dummy procedure pointer should not have assumed-length CHARACTER(*) result type
187fdd0c00SKelvin Li          procedure(character(*)), pointer :: parg_1
197fdd0c00SKelvin Li          print *, parg_1()
207fdd0c00SKelvin Li        end subroutine
217fdd0c00SKelvin Li      end module
227fdd0c00SKelvin Li
237fdd0c00SKelvin Li      character(*) function f()
247fdd0c00SKelvin Li        f = 'abcdefgh'
257fdd0c00SKelvin Li      end function
267fdd0c00SKelvin Li
277fdd0c00SKelvin Li      program test
287fdd0c00SKelvin Li        use m
297fdd0c00SKelvin Li        character(4), external :: f
307fdd0c00SKelvin Li        procedure(character(4)), pointer :: p
317fdd0c00SKelvin Li        p => f
327fdd0c00SKelvin Li        call subr(p)
337fdd0c00SKelvin Li      end
347fdd0c00SKelvin Li
35