blob: bcc7a665fefbfd8d4d8d01921ba272bd2d286aa1 [file] [edit]
! Test invalid SIMPLE procedure attribute combinations and procedure argument
! compatibility checks.
! RUN: %python %S/test_errors.py %s %flang_fc1
! --- CASE 1: SIMPLE + IMPURE conflict
!ERROR: A procedure may not have both the SIMPLE and IMPURE attributes
simple impure subroutine bug()
end subroutine
! --- CASE 2: IMPURE + SIMPLE conflict
!ERROR: A procedure may not have both the SIMPLE and IMPURE attributes
impure simple subroutine bug2()
end subroutine
! --- CASE 3: PURE does NOT satisfy SIMPLE
module pure_not_enough_for_simple
abstract interface
simple subroutine simple_proc()
end subroutine
end interface
contains
subroutine needs_simple(p)
procedure(simple_proc) :: p
end subroutine
pure subroutine pure_only()
end subroutine
subroutine test()
!ERROR: Actual procedure argument has interface incompatible with dummy argument 'p=': incompatible procedure attributes: Simple
call needs_simple(pure_only)
end subroutine
end module
! --- CASE 4: Neither PURE nor SIMPLE does NOT satisfy PURE
module m
implicit none
abstract interface
pure integer function iproc(x)
integer, intent(in) :: x
end function
end interface
contains
integer function impure(x)
integer, intent(in) :: x
impure = x
end function
pure integer function apply_pure(f, x)
procedure(iproc) :: f
integer, intent(in) :: x
apply_pure = f(x)
end function
integer function test()
!ERROR: Actual procedure argument has interface incompatible with dummy argument 'f=': incompatible procedure attributes: Pure
test = apply_pure(impure, 1)
end function
end module