1! { dg-do run }
2! { dg-additional-sources f2c_4.c }
3! { dg-options "-ff2c -w" }
4
5! Check -ff2c calling conventions
6!   Return value of REAL function is promoted to C type double
7!   Return value of COMPLEX function is via an extra argument in the
8!    calling sequence that points to where to store the return value
9!   Addional underscore appended to function name
10program f2c_4
11  complex c, f2c_4k, f2c_4l
12  double complex z, f2c_4m, f2c_4n
13  integer i
14
15  ! Promotion of REAL function
16  call f2c_4a()
17
18  ! Return COMPLEX arg - call Fortran routines from C
19  call f2c_4c()
20  call f2c_4e()
21  call f2c_4g()
22  call f2c_4i()
23
24  !  Return COMPLEX arg - call C routines from Fortran
25  c = cmplx(1234.0,5678.0)
26  z = dcmplx(1234.0d0,5678.0d0)
27  if ( c .ne. f2c_4k(c) )   STOP 1
28  if ( c .ne. f2c_4l(i,c) ) STOP 2
29  if ( z .ne. f2c_4m(z) )   STOP 3
30  if ( z .ne. f2c_4n(i,z) ) STOP 4
31
32end
33
34real function f2c_4b(x)
35  double precision x
36  f2c_4b = x
37end
38
39complex function f2c_4d(x)
40  complex x
41  f2c_4d = x
42end
43
44complex function f2c_4f(i,x)
45  complex x
46  integer i
47  f2c_4f = x
48end
49
50double complex function f2c_4h(x)
51  double complex x
52  f2c_4h = x
53end
54
55double complex function f2c_4j(i,x)
56  double complex x
57  f2c_4j = x
58end
59