1! { dg-do compile }
2! { dg-options "-std=f95" }
3!
4! This tests the patch for PR25024.
5
6! PR25024 - The external attribute for subroutine a would cause an ICE.
7  subroutine A ()
8    EXTERNAL A  ! { dg-error "EXTERNAL attribute conflicts with SUBROUTINE" }
9  END
10
11function ext (y)  ! { dg-error "EXTERNAL attribute conflicts with FUNCTION" }
12  real ext, y
13  external ext
14  !ext = y * y
15end function ext
16
17function ext1 (y)
18  real ext1, y
19  external z        ! OK no conflict
20  ext1 = y * y
21end function ext1
22
23program main
24  real ext, inval
25  external ext       ! OK, valid external reference.
26  external main      ! { dg-error "PROGRAM attribute conflicts with EXTERNAL" }
27  interface
28    function ext1 (y)
29      real ext1, y
30      external ext1
31    end function ext1  ! { dg-error "Duplicate EXTERNAL attribute" }
32  end interface
33  inval = 1.0
34  print *, ext(inval)
35  print *, ext1(inval)
36  print *, inv(inval)
37contains
38  function inv (y)  ! { dg-error "EXTERNAL attribute conflicts with FUNCTION" }
39    real inv, y
40    external inv
41    !inv = y * y * y
42  end function inv
43end program main
44
45