1 #include <stdlib.h>
2 #include <stdio.h>
3
4 #include <ISO_Fortran_binding.h>
5 #include "dump-descriptors.h"
6
7 extern void ftest (int n, CFI_cdesc_t *a, int *b, char *c, double *d);
8 extern void ctest1 (CFI_cdesc_t *a, int *b, char *c, double *d);
9 extern void ctest2 (int n, CFI_cdesc_t *a, int *b, char *c, double *d);
10
11 static void *aa;
12 static int *bb;
13 static char *cc;
14 static double *dd;
15
16 extern void
ctest1(CFI_cdesc_t * a,int * b,char * c,double * d)17 ctest1 (CFI_cdesc_t *a, int *b, char *c, double *d)
18 {
19 /* Cache all the pointer arguments for later use by ctest2. */
20 aa = a->base_addr;
21 bb = b;
22 cc = c;
23 dd = d;
24
25 /* Test calling back into Fortran. */
26 ftest (0, NULL, NULL, NULL, NULL);
27 ftest (1, a, NULL, NULL, NULL);
28 ftest (2, a, b, NULL, NULL);
29 ftest (3, a, b, c, NULL);
30 ftest (4, a, b, c, d);
31 }
32
33 extern void
ctest2(int n,CFI_cdesc_t * a,int * b,char * c,double * d)34 ctest2 (int n, CFI_cdesc_t *a, int *b, char *c, double *d)
35 {
36 if (n >= 1)
37 {
38 if (!a)
39 abort ();
40 if (a->base_addr != aa)
41 abort ();
42 }
43 else
44 if (a)
45 abort ();
46
47 if (n >= 2)
48 {
49 if (!b)
50 abort ();
51 if (*b != *bb)
52 abort ();
53 }
54 else
55 if (b)
56 abort ();
57
58 if (n >= 3)
59 {
60 if (!c)
61 abort ();
62 if (*c != *cc)
63 abort ();
64 }
65 else
66 if (c)
67 abort ();
68
69 if (n >= 4)
70 {
71 if (!d)
72 abort ();
73 if (*d != *dd)
74 abort ();
75 }
76 else
77 if (d)
78 abort ();
79
80 }
81
82
83