1  /* { dg-options "-Wall" } */
       2  
       3  /* C99 6.5.2.2 Function calls.
       4     Test scalar passing and return values involving decimal floating
       5     point types.  */
       6  
       7  #include "dfp-dbg.h"
       8  
       9  /* A handful of functions that return their Nth _Decimal32
      10     argument with mixed types in parameter list.  */
      11  
      12  _Decimal32
      13  arg0_32 (_Decimal32 arg0, int arg1, unsigned int arg2,
      14         float arg3, double  arg4, long double arg5)
      15  {
      16    return arg0;
      17  }
      18  
      19  _Decimal32
      20  arg1_32 (int arg0, _Decimal32 arg1, unsigned int arg2,
      21         float arg3, double arg4, long double arg5)
      22  {
      23    return arg1;
      24  }
      25  
      26  _Decimal32
      27  arg2_32 (int arg0, unsigned int arg1, _Decimal32 arg2,
      28         float arg3, double arg4, long double arg5)
      29  {
      30    return arg2;
      31  }
      32  
      33  
      34  _Decimal32
      35  arg3_32 (int arg0, unsigned int arg1, float arg2,
      36         _Decimal32 arg3, double arg4, long double arg5)
      37  {
      38    return arg3;
      39  }
      40  
      41  _Decimal32
      42  arg4_32 (int arg0, unsigned int arg1, float arg2,
      43         double arg3, _Decimal32 arg4, long double arg5)
      44  {
      45    return arg4;
      46  }
      47  
      48  _Decimal32
      49  arg5_32 (int arg0, unsigned int arg1, float arg2,
      50         double arg3, long double arg4, _Decimal32 arg5)
      51  {
      52    return arg5;
      53  }
      54  
      55  /* A handful of functions that return their Nth _Decimal64
      56     argument with mixed types in parameter list.  */
      57  
      58  _Decimal64
      59  arg0_64 (_Decimal64 arg0, int arg1, unsigned int arg2,
      60           float arg3, double  arg4, long double arg5)
      61  {
      62    return arg0;
      63  }
      64  
      65  _Decimal64
      66  arg1_64 (int arg0, _Decimal64 arg1, unsigned int arg2,
      67           float arg3, double arg4, long double arg5)
      68  {
      69    return arg1;
      70  }
      71  
      72  _Decimal64
      73  arg2_64 (int arg0, unsigned int arg1, _Decimal64 arg2,
      74           float arg3, double arg4, long double arg5)
      75  {
      76    return arg2;
      77  }
      78  
      79  _Decimal64
      80  arg3_64 (int arg0, unsigned int arg1, float arg2,
      81           _Decimal64 arg3, double arg4, long double arg5)
      82  {
      83    return arg3;
      84  }
      85  
      86  _Decimal64
      87  arg4_64 (int arg0, unsigned int arg1, float arg2,
      88           float arg3, _Decimal64 arg4, long double arg5)
      89  {
      90    return arg4;
      91  }
      92  
      93  _Decimal64
      94  arg5_64 (int arg0, unsigned int arg1, float arg2,
      95           double arg3, long double arg4, _Decimal64 arg5)
      96  {
      97    return arg5;
      98  }
      99  
     100  /* A handful of functions that return their Nth _Decimal128
     101     argument with mixed types in parameter list.  */
     102  
     103  _Decimal128
     104  arg0_128 (_Decimal128 arg0, int arg1, unsigned int arg2,
     105           float arg3, double  arg4, long double arg5)
     106  {
     107    return arg0;
     108  }
     109  _Decimal128
     110  arg1_128 (int arg0, _Decimal128 arg1, unsigned int arg2,
     111           float arg3, double arg4, long double arg5)
     112  {
     113    return arg1;
     114  }
     115  
     116  _Decimal128
     117  arg2_128 (int arg0, unsigned int arg1, _Decimal128 arg2,
     118           float arg3, double arg4, long double arg5)
     119  {
     120    return arg2;
     121  }
     122  
     123  _Decimal128
     124  arg3_128 (int arg0, unsigned int arg1, float arg2,
     125           _Decimal128 arg3, double arg4, long double arg5)
     126  {
     127    return arg3;
     128  }
     129  
     130  _Decimal128
     131  arg4_128 (int arg0, unsigned int arg1, float arg2,
     132           float arg3, _Decimal32 arg4, long double arg5)
     133  {
     134    return arg4;
     135  }
     136  
     137  _Decimal128
     138  arg5_128 (int arg0, unsigned int arg1, float arg2,
     139           double arg3, long double arg4, _Decimal128 arg5)
     140  {
     141    return arg5;
     142  }
     143  
     144  
     145  
     146  int
     147  main ()
     148  {
     149    /* _Decimal32 variants.  */
     150    if (arg0_32 (0.0df, -1, 2, 3.0f, 4.0, 5.0l) != 0.0df) FAILURE
     151    if (arg1_32 (0, 1.0df, 2, 3.0f, 4.0, 5.0l) != 1.0df) FAILURE
     152    if (arg2_32 (0, -1, 2.0df, 3.0f, 4.0, 5.0l) != 2.0df) FAILURE
     153    if (arg3_32 (0, -1, 2.0f, 3.0df, 4.0, 5.0l) != 3.0df) FAILURE
     154    if (arg4_32 (0, -1, 2.0f, 3.0, 4.0df, 5.0l) != 4.0df) FAILURE
     155    if (arg5_32 (0, -1, 2.0f, 3.0, 4.0l, 5.0df) != 5.0df) FAILURE
     156  
     157    /* _Decimal64 variants.  */
     158    if (arg0_64 (0.0dd, -1, 2, 3.0f, 4.0, 5.0l) != 0.0dd) FAILURE
     159    if (arg1_64 (0, 1.0dd, 2, 3.0f, 4.0, 5.0l) != 1.0dd) FAILURE
     160    if (arg2_64 (0, -1, 2.0dd, 3.0f, 4.0, 5.0l) != 2.0dd) FAILURE
     161    if (arg3_64 (0, -1, 2.0f, 3.0dd, 4.0, 5.0l) != 3.0dd) FAILURE
     162    if (arg4_64 (0, -1, 2.0f, 3.0, 4.0dd, 5.0l) != 4.0dd) FAILURE
     163    if (arg5_64 (0, -1, 2.0f, 3.0, 4.0l, 5.0dd) != 5.0dd) FAILURE
     164  
     165    /* _Decimal128 variants.  */
     166    if (arg0_128 (0.0dl, -1, 2, 3.0f, 4.0, 5.0l) != 0.0dl) FAILURE
     167    if (arg1_128 (0, 1.0dl, 2, 3.0f, 4.0, 5.0l) != 1.0dl) FAILURE
     168    if (arg2_128 (0, -1, 2.0dl, 3.0f, 4.0, 5.0l) != 2.0dl) FAILURE
     169    if (arg3_128 (0, -1, 2.0f, 3.0dl, 4.0, 5.0l) != 3.0dl) FAILURE
     170    if (arg4_128 (0, -1, 2.0f, 3.0, 4.0dl, 5.0l) != 4.0dl) FAILURE
     171    if (arg5_128 (0, -1, 2.0f, 3.0, 4.0l, 5.0dl) != 5.0dl) FAILURE
     172  
     173    FINISH
     174  }