! { dg-do compile }
! { dg-options "-std=f95" }

! PR fortran/32095
! PR fortran/34228
! Check for a special case when the return-type of a function is given outside
! its "body" and contains symbols defined inside.

MODULE testmod
  IMPLICIT REAL(a-z)

CONTAINS

  CHARACTER(len=x) FUNCTION test1 (x) ! { dg-error "of INTEGER" }
    IMPLICIT REAL(a-z)
    INTEGER :: x ! { dg-error "already has basic type" }
    test1 = "foobar"
  END FUNCTION test1

  CHARACTER(len=x) FUNCTION test2 (x) ! { dg-bogus "used before|of INTEGER" }
    IMPLICIT INTEGER(a-z)
    test2 = "foobar"
  END FUNCTION test2

END MODULE testmod
  
CHARACTER(len=i) FUNCTION test3 (i) ! { dg-bogus "used before|of INTEGER" }
  ! i is IMPLICIT INTEGER by default
  test3 = "foobar"
END FUNCTION test3

CHARACTER(len=g) FUNCTION test4 (g) ! { dg-error "of INTEGER" }
  ! g is REAL, unless declared INTEGER.
  test4 = "foobar"
END FUNCTION test4

! Test an empty function works, too.
INTEGER FUNCTION test5 ()
END FUNCTION test5

! { dg-final { cleanup-modules "testmod" } }
