OSDN Git Service

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