1/* Test for diagnostics for Wconversion between floating-point and
2   integers. C++ equivalent of
3   gcc/testsuite/gcc.dg/Wconversion-real-integer.c */
4
5/* { dg-do compile }
6/* { dg-options "-Wconversion -ftrack-macro-expansion=0" } */
7/* { dg-require-effective-target int32plus } */
8#include <limits.h>
9
10void fsi (signed int x);
11void fui (unsigned int x);
12void ffloat (float x);
13void fdouble (double x);
14
15float  vfloat;
16double vdouble;
17
18void h (void)
19{
20  unsigned int ui = 3;
21  int   si = 3;
22  unsigned char uc = 3;
23  signed char sc = 3;
24  float  f = 3;
25  double d = 3;
26
27  fsi (3.1f); /* { dg-warning "conversion" } */
28  si = 3.1f; /* { dg-warning "conversion" } */
29  fsi (3.1);  /* { dg-warning "conversion" } */
30  si = 3.1;  /* { dg-warning "conversion" } */
31  fsi (d);    /* { dg-warning "conversion" } */
32  si = d;    /* { dg-warning "conversion" } */
33  fui (-1.0); /* { dg-warning "overflow" } */
34  ui = -1.0;   /* { dg-warning "overflow" } */
35  ffloat (INT_MAX);  /* { dg-warning "conversion" } */
36  vfloat = INT_MAX;  /* { dg-warning "conversion" } */
37  ffloat (16777217); /* { dg-warning "conversion" } */
38  vfloat = 16777217; /* { dg-warning "conversion" } */
39  ffloat (si); /* { dg-warning "conversion" } */
40  vfloat = si; /* { dg-warning "conversion" } */
41  ffloat (ui); /* { dg-warning "conversion" } */
42  vfloat = ui; /* { dg-warning "conversion" } */
43
44  fsi (3);
45  si = 3;
46  fsi (3.0f);
47  si = 3.0f;
48  fsi (3.0);
49  si = 3.0;
50  fsi (16777217.0f);
51  si = 16777217.0f;
52  fsi ((int) 3.1);
53  si = (int) 3.1;
54  ffloat (3U);
55  vfloat = 3U;
56  ffloat (3);
57  vfloat = 3;
58  ffloat (INT_MIN);
59  vfloat = INT_MIN;
60  ffloat (uc);
61  vfloat = uc;
62  ffloat (sc);
63  vfloat = sc;
64
65  fdouble (UINT_MAX);
66  vdouble = UINT_MAX;
67  fdouble (ui);
68  vdouble = ui;
69  fdouble (si);
70  vdouble = si;
71}
72
73
74void fss (signed short x);
75void fus (unsigned short x);
76void fsc (signed char x);
77void fuc (unsigned char x);
78
79void h2 (void)
80{
81  unsigned short int us;
82  short int   ss;
83  unsigned char uc;
84  signed char sc;
85
86  fss (4294967294.0); /* { dg-warning "conversion" } */
87  ss = 4294967294.0; /* { dg-warning "conversion" } */
88  fss (-4294967294.0);  /* { dg-warning "conversion" } */
89  ss = -4294967294.0;  /* { dg-warning "conversion" } */
90  fus (4294967294.0); /* { dg-warning "conversion" } */
91  us = 4294967294.0; /* { dg-warning "conversion" } */
92  fus (-4294967294.0);  /* { dg-warning "conversion" } */
93  us = -4294967294.0;  /* { dg-warning "conversion" } */
94
95  fsc (500.0); /* { dg-warning "conversion" } */
96  sc = 500.0; /* { dg-warning "conversion" } */
97  fsc (-500.0);  /* { dg-warning "conversion" } */
98  sc = -500.0;  /* { dg-warning "conversion" } */
99  fuc (500.0); /* { dg-warning "conversion" } */
100  uc = 500.0; /* { dg-warning "conversion" } */
101  fuc (-500.0);  /* { dg-warning "conversion" } */
102  uc = -500.0;  /* { dg-warning "conversion" } */
103
104  fss (500.0);
105  ss = 500.0;
106  fss (-500.0);
107  ss = -500.0;
108  fus (500.0);
109  us = 500.0;
110  fus (-500.0);   /* { dg-warning "conversion" } */
111  us = -500.0;    /* { dg-warning "conversion" } */
112}
113