! { dg-do compile } ! { dg-options "-std=legacy" } ! ! This tests the patch for PR26787 in which it was found that setting ! the result of one module procedure from within another produced an ! ICE rather than an error. ! ! This is an "elaborated" version of the original testcase from ! Joshua Cogliati ! function ext1 () integer ext1, ext2, arg ext1 = 1 entry ext2 (arg) ext2 = arg contains subroutine int_1 () ext1 = arg * arg ! OK - host associated. end subroutine int_1 end function ext1 module simple implicit none contains integer function foo () foo = 10 ! OK - function result call foobar () contains subroutine foobar () integer z foo = 20 ! OK - host associated. end subroutine foobar end function foo subroutine bar() ! This was the original bug. foo = 10 ! { dg-error "is not a variable" } end subroutine bar integer function oh_no () oh_no = 1 foo = 5 ! { dg-error "is not a variable" } end function oh_no end module simple module simpler implicit none contains integer function foo_er () foo_er = 10 ! OK - function result end function foo_er end module simpler use simpler real w, stmt_fcn interface function ext1 () integer ext1 end function ext1 function ext2 (arg) integer ext2, arg end function ext2 end interface stmt_fcn (w) = sin (w) call x (y ()) x = 10 ! { dg-error "is not a variable" } y = 20 ! { dg-error "is not a variable" } foo_er = 8 ! { dg-error "is not a variable" } ext1 = 99 ! { dg-error "is not a variable" } ext2 = 99 ! { dg-error "is not a variable" } stmt_fcn = 1.0 ! { dg-error "is not a variable" } w = stmt_fcn (1.0) contains subroutine x (i) integer i y = i ! { dg-error "is not a variable" } end subroutine x function y () integer y y = 2 ! OK - function result end function y end