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