OSDN Git Service

* gcc.dg/nodfp-1.c: New test.
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.dg / dfp / convert-int-fold.c
1 /* { dg-do compile } */
2 /* { dg-options "-std=gnu99 -O" } */
3
4 /* N1150 5.1 Conversion between decimal floating integer.
5    C99 6.3.1.4(1a) New.
6    These should all be folded at compile time.  */
7
8 extern void link_error (void);
9
10 int
11 main ()
12 {
13   _Decimal32 d32;
14   _Decimal64 d64;
15   _Decimal128 d128;
16   unsigned int ui;
17   unsigned long ul;
18   unsigned long long ull;
19   int si;
20   long sl;
21   long long sll;
22   _Bool b;
23
24   /* C99 Section 6.7.2 Type specifiers.  Type _Bool is 
25      mentioned in this section.  Conversions between 
26      _Bool and DFP types.  */
27
28   /* Decimal float to unsigned integer.  */
29   d32 = 456.789df;
30   d64 = 23.456789dd;
31   d128 = 1234.5678dl;
32
33   ui = d32;
34   if (ui != 456U)
35     link_error ();
36   ul = d32;
37   if (ul != 456UL)
38     link_error ();
39   ull = d32;
40   if (ull != 456ULL)
41     link_error ();
42
43   ui = d64;
44   if (ui != 23U)
45     link_error ();
46   ul = d64;
47   if (ul != 23UL)
48     link_error ();
49   ull = d64;
50   if (ull != 23ULL)
51     link_error ();
52
53   ui = d128;
54   if (ui != 1234U)
55     link_error ();
56   ul = d128;
57   if (ul != 1234UL)
58     link_error ();
59   ull = d128;
60   if (ull != 1234ULL)
61     link_error ();
62
63   /* Decimal float to signed integer.  */
64
65   /* Decimal float to _Bool.  */
66   d32 = 1.23df;
67   d64 = -3.4dd;
68   d128 = 0.00003dl;
69
70   b = d32;
71   if (!b)
72     link_error ();
73   b = d64;
74   if (!b)
75     link_error ();
76   b = d128;
77   if (!b)
78     link_error ();
79
80   /* Unsigned integer to decimal float.  */
81   ui = 987U;
82   ul = 345678UL;
83   ull = 1234567ULL;
84
85   d32 = ui;
86   if (d32 != 987.0df)
87     link_error ();
88   d32 = ul;
89   if (d32 != 345678.0df)
90     link_error ();
91   d32 = ull;
92   if (d32 != 1234567.df)
93     link_error ();
94
95   d64 = ui;
96   if (d64 != 987.0dd)
97     link_error ();
98   d64 = ul;
99   if (d64 != 345678.0dd)
100     link_error ();
101   d64 = ull;
102   if (d64 != 1234567.dd)
103     link_error ();
104
105   d128 = ui;
106   if (d128 != 987.0dl)
107     link_error ();
108   d128 = ul;
109   if (d128 != 345678.0dl)
110     link_error ();
111   d128 = ull;
112   if (d128 != 1234567.dl)
113     link_error ();
114
115   /* Signed integer to decimal float.  */
116   si = -987;
117   sl = -345678;
118   sll = -1234567;
119
120   d32 = si;
121   if (d32 != -987.0df)
122     link_error ();
123   d32 = sl;
124   if (d32 != -345678.0df)
125     link_error ();
126   d32 = sll;
127   if (d32 != -1234567.df)
128     link_error ();
129
130   d64 = si;
131   if (d64 != -987.0dd)
132     link_error ();
133   d64 = sl;
134   if (d64 != -345678.0dd)
135     link_error ();
136   d64 = sll;
137   if (d64 != -1234567.dd)
138     link_error ();
139
140   d128 = si;
141   if (d128 != -987.0dl)
142     link_error ();
143   d128 = sl;
144   if (d128 != -345678.0dl)
145     link_error ();
146   d128 = sll;
147   if (d128 != -1234567.dl)
148     link_error ();
149
150   /* _Bool to decimal float.  */
151   d32 = 0.0DF;
152   d64 = 0.0DD;
153   d128 = 0.0DL;
154   
155   b = d32;
156   if (b)
157     link_error ();
158   b = d64;
159   if (b)
160     link_error ();
161   b = d128;
162   if (b)
163     link_error ();
164
165   return 0;
166 }