2014-04-15 Richard Biener <rguenther@suse.de>
[official-gcc.git] / gcc / testsuite / gfortran.dg / bind_c_dts_driver.c
blobbf076ce4a40650c81394bfed85230258d6a9833e
1 double fabs (double);
3 /* interops with myftype_1 */
4 typedef struct {
5 int m, n;
6 float r;
7 } myctype_t;
9 /* interops with particle in f90 */
10 typedef struct particle
12 double x; /* x position */
13 double vx; /* velocity in x direction */
14 double y; /* y position */
15 double vy; /* velocity in y direction */
16 double z; /* z position */
17 double vz; /* velocity in z direction */
18 double m; /* mass */
19 }particle_t;
21 extern void abort(void);
22 void types_test(particle_t *my_particles, int num_particles);
23 /* declared in the fortran module bind_c_dts */
24 extern myctype_t myDerived;
26 int main(int argc, char **argv)
28 particle_t my_particles[100];
30 /* the fortran code will modify the middle particle */
31 my_particles[49].x = 1.0;
32 my_particles[49].vx = 1.0;
33 my_particles[49].y = 1.0;
34 my_particles[49].vy = 1.0;
35 my_particles[49].z = 1.0;
36 my_particles[49].vz = 1.0;
37 my_particles[49].m = 1.0;
39 myDerived.m = 1;
40 myDerived.n = 2;
41 myDerived.r = 3.0;
43 types_test(&(my_particles[0]), 100);
45 if(fabs(my_particles[49].x - 1.2) > 0.00000000)
46 abort();
47 if(fabs(my_particles[49].vx - 1.2) > 0.00000000)
48 abort();
49 if(fabs(my_particles[49].y - 1.2) > 0.00000000)
50 abort();
51 if(fabs(my_particles[49].vy - 1.2) > 0.00000000)
52 abort();
53 if(fabs(my_particles[49].z - 1.2) > 0.00000000)
54 abort();
55 if(fabs(my_particles[49].vz - 1.2) > 0.00000000)
56 abort();
57 if(fabs(my_particles[49].m - 1.2) > 0.00000000)
58 abort();
59 if(myDerived.m != 2)
60 abort();
61 if(myDerived.n != 3)
62 abort();
63 if(fabs(myDerived.r - 4.0) > 0.00000000)
64 abort();
65 return 0;
66 }/* end main() */