193b0638eSPeter Klausler! RUN: %python %S/test_errors.py %s %flang_fc1 293b0638eSPeter Klausler! Tests attempts at forward references to local names in a FUNCTION prefix 393b0638eSPeter Klausler 493b0638eSPeter Klausler! This case is not an error, but will elicit bogus errors if the 593b0638eSPeter Klausler! result type of the function is badly resolved. 693b0638eSPeter Klauslermodule m1 793b0638eSPeter Klausler type t1 893b0638eSPeter Klausler sequence 993b0638eSPeter Klausler integer not_m 1093b0638eSPeter Klausler end type 1193b0638eSPeter Klausler contains 1293b0638eSPeter Klausler type(t1) function foo(n) 1393b0638eSPeter Klausler integer, intent(in) :: n 1493b0638eSPeter Klausler type t1 1593b0638eSPeter Klausler sequence 1693b0638eSPeter Klausler integer m 1793b0638eSPeter Klausler end type 1893b0638eSPeter Klausler foo%m = n 1993b0638eSPeter Klausler end function 2093b0638eSPeter Klauslerend module 2193b0638eSPeter Klausler 2293b0638eSPeter Klauslersubroutine s1 2393b0638eSPeter Klausler use :: m1, only: foo 2493b0638eSPeter Klausler type t1 2593b0638eSPeter Klausler sequence 2693b0638eSPeter Klausler integer m 2793b0638eSPeter Klausler end type 2893b0638eSPeter Klausler type(t1) x 2993b0638eSPeter Klausler x = foo(234) 3093b0638eSPeter Klausler print *, x 3193b0638eSPeter Klauslerend subroutine 3293b0638eSPeter Klausler 3393b0638eSPeter Klauslermodule m2 3493b0638eSPeter Klausler integer, parameter :: k = kind(1.e0) 3593b0638eSPeter Klausler contains 3693b0638eSPeter Klausler real(kind=k) function foo(n) 3793b0638eSPeter Klausler integer, parameter :: k = kind(1.d0) 3893b0638eSPeter Klausler integer, intent(in) :: n 3993b0638eSPeter Klausler foo = n 4093b0638eSPeter Klausler end function 4193b0638eSPeter Klauslerend module 4293b0638eSPeter Klausler 4393b0638eSPeter Klauslersubroutine s2 4493b0638eSPeter Klausler use :: m2, only: foo 4593b0638eSPeter Klausler !If we got the type of foo right, this declaration will fail 4693b0638eSPeter Klausler !due to an attempted division by zero. 47*502e7690SPeter Klausler !WARNING: INTEGER(4) division by zero 4893b0638eSPeter Klausler !ERROR: Must be a constant value 496111ddedSPeter Klausler integer, parameter :: test = 1 / (kind(foo(1)) - kind(1.d0)) 5093b0638eSPeter Klauslerend subroutine 5193b0638eSPeter Klausler 5293b0638eSPeter Klauslermodule m3 536111ddedSPeter Klausler real(kind=kind(1.0e0)) :: x 5493b0638eSPeter Klausler contains 5593b0638eSPeter Klausler real(kind=kind(x)) function foo(x) 5693b0638eSPeter Klausler real(kind=kind(1.0d0)) x 57*502e7690SPeter Klausler !WARNING: INTEGER(4) division by zero 586111ddedSPeter Klausler !ERROR: Must be a constant value 596111ddedSPeter Klausler integer, parameter :: test = 1 / (kind(foo) - kind(1.d0)) 6093b0638eSPeter Klausler foo = n 6193b0638eSPeter Klausler end function 6293b0638eSPeter Klauslerend module 6393b0638eSPeter Klausler 6493b0638eSPeter Klauslermodule m4 6593b0638eSPeter Klausler contains 6693b0638eSPeter Klausler real(n) function foo(x) 676111ddedSPeter Klausler !ERROR: 'foo' is not an object that can appear in an expression 6893b0638eSPeter Klausler integer, parameter :: n = kind(foo) 6993b0638eSPeter Klausler real(n), intent(in) :: x 706111ddedSPeter Klausler !ERROR: 'x' is not an object that can appear in an expression 7193b0638eSPeter Klausler foo = x 7293b0638eSPeter Klausler end function 7393b0638eSPeter Klauslerend module 74