blob: 99eaad833b87159260b33d929a8a519e714dc2c7 [file] [log] [blame]
/* { dg-options "-std=gnu99 -O" } */
/* N1150 5.1 Conversion between decimal floating integer.
C99 6.3.1.4(1a) New.
These should all be folded at compile time. */
extern void link_error (void);
int
main ()
{
_Decimal32 d32;
_Decimal64 d64;
_Decimal128 d128;
unsigned int ui;
unsigned long ul;
unsigned long long ull;
int si;
long sl;
long long sll;
_Bool b;
/* C99 Section 6.7.2 Type specifiers. Type _Bool is
mentioned in this section. Conversions between
_Bool and DFP types. */
/* Decimal float to unsigned integer. */
d32 = 456.789df;
d64 = 23.456789dd;
d128 = 1234.5678dl;
ui = d32;
if (ui != 456U)
link_error ();
ul = d32;
if (ul != 456UL)
link_error ();
ull = d32;
if (ull != 456ULL)
link_error ();
ui = d64;
if (ui != 23U)
link_error ();
ul = d64;
if (ul != 23UL)
link_error ();
ull = d64;
if (ull != 23ULL)
link_error ();
ui = d128;
if (ui != 1234U)
link_error ();
ul = d128;
if (ul != 1234UL)
link_error ();
ull = d128;
if (ull != 1234ULL)
link_error ();
/* Decimal float to signed integer. */
/* Decimal float to _Bool. */
d32 = 1.23df;
d64 = -3.4dd;
d128 = 0.00003dl;
b = d32;
if (!b)
link_error ();
b = d64;
if (!b)
link_error ();
b = d128;
if (!b)
link_error ();
/* Unsigned integer to decimal float. */
ui = 987U;
ul = 345678UL;
ull = 1234567ULL;
d32 = ui;
if (d32 != 987.0df)
link_error ();
d32 = ul;
if (d32 != 345678.0df)
link_error ();
d32 = ull;
if (d32 != 1234567.df)
link_error ();
d64 = ui;
if (d64 != 987.0dd)
link_error ();
d64 = ul;
if (d64 != 345678.0dd)
link_error ();
d64 = ull;
if (d64 != 1234567.dd)
link_error ();
d128 = ui;
if (d128 != 987.0dl)
link_error ();
d128 = ul;
if (d128 != 345678.0dl)
link_error ();
d128 = ull;
if (d128 != 1234567.dl)
link_error ();
/* Signed integer to decimal float. */
si = -987;
sl = -345678;
sll = -1234567;
d32 = si;
if (d32 != -987.0df)
link_error ();
d32 = sl;
if (d32 != -345678.0df)
link_error ();
d32 = sll;
if (d32 != -1234567.df)
link_error ();
d64 = si;
if (d64 != -987.0dd)
link_error ();
d64 = sl;
if (d64 != -345678.0dd)
link_error ();
d64 = sll;
if (d64 != -1234567.dd)
link_error ();
d128 = si;
if (d128 != -987.0dl)
link_error ();
d128 = sl;
if (d128 != -345678.0dl)
link_error ();
d128 = sll;
if (d128 != -1234567.dl)
link_error ();
/* _Bool to decimal float. */
d32 = 0.0DF;
d64 = 0.0DD;
d128 = 0.0DL;
b = d32;
if (b)
link_error ();
b = d64;
if (b)
link_error ();
b = d128;
if (b)
link_error ();
return 0;
}