summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.dg/dfp/fe-convert-1.c
blob: b6528029b40a5ad19481dabbf7f79322c75fb6d0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
/* { dg-skip-if "test is for emulation" { hard_dfp } { "*" } { "" } } */

/* Check that appropriate exceptions are raised for conversions involving
   decimal float values.  */

#include "fe-check.h"

volatile _Decimal32 d32;
volatile _Decimal64 d64;
volatile _Decimal128 d128;

/* Conversions between decimal float types should raise an invalid
   exception if the value doesn't fit, either because the value
   is too large or the result can't hold the full precision.  */

CONVERT (100, d64, d32, 9.999999e96DD, 0)
CONVERT (101, d64, d32, 10.000000e96DD, FE_INEXACT|FE_OVERFLOW)
CONVERT (102, d64, d32, 1.1111111DD, FE_INEXACT)
CONVERT (110, d128, d32, 9.999999e96DL, 0)
CONVERT (111, d128, d32, 10.000000e96DL, FE_INEXACT|FE_OVERFLOW)
CONVERT (112, d128, d32, 1.1111111DL, FE_INEXACT)
CONVERT (120, d128, d64, 9.999999999999999E384DL, 0)
CONVERT (121, d128, d64, 10.00000000000000E384DL, FE_INEXACT|FE_OVERFLOW)
CONVERT (122, d128, d64, 1.1111111111111111DL, FE_INEXACT)

int
main ()
{
  convert_100 ();
  convert_101 ();
  convert_102 ();
  convert_110 ();
  convert_111 ();
  convert_112 ();
  convert_120 ();
  convert_121 ();
  convert_122 ();

  FINISH
}