OSDN Git Service

* gcc.dg/dfp/func-array.c: Support -DDBG to report individual failures.
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.dg / dfp / func-struct.c
1 /* { dg-options "-std=gnu99" } */
2
3 /* C99 6.5.2.2 Function calls.
4    Test structure passing and return values involving decimal floating
5    point types.  */
6
7 extern void abort (void);
8 static int failcnt;
9
10 /* Support compiling the test to report individual failures; default is
11    to abort as soon as a check fails.  */
12 #ifdef DBG
13 #include <stdio.h>
14 #define FAILURE { printf ("failed at line %d\n", __LINE__); failcnt++; }
15 #else
16 #define FAILURE abort ();
17 #endif
18
19 struct example
20 {
21   _Decimal128 d128;
22   char dummy1;
23   _Decimal64 d64;
24   char dummy2;
25   _Decimal32 d32;
26 } nums = { 1.0dl, 'a', 2.0dd, 'b', 3.0df };
27
28 _Decimal32
29 d32_field (struct example s)
30 {
31   return s.d32;
32 }
33
34 _Decimal64
35 d64_field (struct example s)
36 {
37   return s.d64;
38 }
39
40 _Decimal128
41 d128_field (struct example s)
42 {
43   return s.d128;
44 }
45
46 char
47 dummy1_field (struct example s)
48 {
49   return s.dummy1;
50 }
51
52 char
53 dummy2_field (struct example s)
54 {
55   return s.dummy2;
56 }
57
58 _Decimal32
59 ptr_d32_field (struct example *s)
60 {
61   return s->d32;
62 }
63
64 _Decimal64
65 ptr_d64_field (struct example *s)
66 {
67   return s->d64;
68 }
69
70 _Decimal128
71 ptr_d128_field (struct example *s)
72 {
73   return s->d128;
74 }
75
76 char
77 ptr_dummy1_field (struct example *s)
78 {
79   return s->dummy1;
80 }
81
82 char
83 ptr_dummy2_field (struct example *s)
84 {
85   return s->dummy2;
86 }
87
88 \f
89 int
90 main ()
91 {
92   if (d32_field (nums) != 3.0df) FAILURE
93   if (d64_field (nums) != 2.0dd) FAILURE
94   if (d128_field (nums) != 1.0dl) FAILURE
95   if (dummy1_field (nums) != 'a') FAILURE
96   if (dummy2_field (nums) != 'b') FAILURE
97
98   if (ptr_d32_field (&nums) != 3.0df) FAILURE
99   if (ptr_d64_field (&nums) != 2.0dd) FAILURE
100   if (ptr_d128_field (&nums) != 1.0dl) FAILURE
101   if (ptr_dummy1_field (&nums) != 'a') FAILURE
102   if (ptr_dummy2_field (&nums) != 'b') FAILURE
103
104   if (failcnt != 0)
105     abort ();
106
107   return 0;
108 }