81 lines
2.3 KiB
Fortran
81 lines
2.3 KiB
Fortran
! { 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 <jjcogliati-r1@yahoo.com>
|
|
!
|
|
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
|
|
! { dg-final { cleanup-modules "simple simpler" } }
|