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