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 10 void fsi (signed int x); 11 void fui (unsigned int x); 12 void ffloat (float x); 13 void fdouble (double x); 14 15 float vfloat; 16 double vdouble; 17 h(void)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 74 void fss (signed short x); 75 void fus (unsigned short x); 76 void fsc (signed char x); 77 void fuc (unsigned char x); 78 h2(void)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