1! { dg-do run }
2! Tests the fix for PR24558, which reported that module
3! alternate function entries did not work.
4!
5! Contributed by Erik Edelmann  <eedelman@gcc.gnu.org>
6!
7module foo
8contains
9    function n1 (a)
10        integer :: n1, n2, a, b
11        integer, save :: c
12        c = a
13        n1 = c**3
14        return
15    entry n2 (b)
16        n2 = c * b
17        n2 = n2**2
18        return
19    end function n1
20    function z1 (u)
21        complex :: z1, z2, u, v
22        z1 = (1.0, 2.0) * u
23        return
24    entry z2 (v)
25        z2 = (3, 4) * v
26        return
27    end function z1
28    function n3 (d)
29        integer :: n3, d
30        n3 = n2(d) * n1(d) ! Check sibling references.
31        return
32    end function n3
33    function c1 (a)
34        character(4) :: c1, c2, a, b
35        c1 = a
36        if (a .eq. "abcd") c1 = "ABCD"
37        return
38    entry c2 (b)
39        c2 = b
40        if (b .eq. "wxyz") c2 = "WXYZ"
41        return
42    end function c1
43end module foo
44    use foo
45    if (n1(9) .ne. 729) call abort ()
46    if (n2(2) .ne. 324) call abort ()
47    if (n3(19) .ne. 200564019) call abort ()
48    if (c1("lmno") .ne. "lmno") call abort ()
49    if (c1("abcd") .ne. "ABCD") call abort ()
50    if (c2("lmno") .ne. "lmno") call abort ()
51    if (c2("wxyz") .ne. "WXYZ") call abort ()
52    if (z1((3,4)) .ne. (-5, 10)) call abort ()
53    if (z2((5,6)) .ne. (-9, 38)) call abort ()
54 end
55