1/* PR target/11044 */ 2/* Originator: Tim McGrath <misty-@charter.net> */ 3/* Testcase contributed by Eric Botcazou <ebotcazou@libertysurf.fr> */ 4 5/* Testcase copied from gcc.target/i386/loop-3.c */ 6 7extern void *memset (void *, int, __SIZE_TYPE__); 8extern void abort (void); 9 10typedef struct 11{ 12 unsigned char colormod; 13} entity_state_t; 14 15typedef struct 16{ 17 int num_entities; 18 entity_state_t *entities; 19} packet_entities_t; 20 21typedef struct 22{ 23 double senttime; 24 float ping_time; 25 packet_entities_t entities; 26} client_frame_t; 27 28typedef enum 29{ 30 cs_free, 31 cs_server, 32 cs_zombie, 33 cs_connected, 34 cs_spawned 35} sv_client_state_t; 36 37typedef struct client_s 38{ 39 sv_client_state_t state; 40 int ping; 41 client_frame_t frames[64]; 42} client_t; 43 44int CalcPing (client_t *cl) 45{ 46 float ping; 47 int count, i; 48 register client_frame_t *frame; 49 50 if (cl->state == cs_server) 51 return cl->ping; 52 ping = 0; 53 count = 0; 54 for (frame = cl->frames, i = 0; i < 64; i++, frame++) { 55 if (frame->ping_time > 0) { 56 ping += frame->ping_time; 57 count++; 58 } 59 } 60 if (!count) 61 return 9999; 62 ping /= count; 63 64 return ping * 1000; 65} 66 67int main(void) 68{ 69 client_t cl; 70 71 memset(&cl, 0, sizeof(cl)); 72 73 cl.frames[0].ping_time = 1.0f; 74 75 if (CalcPing(&cl) != 1000) 76 abort(); 77 78 return 0; 79} 80