1/* PR optimization/14235 */ 2/* Origin: <senor_fjord@yahoo.com> */ 3 4typedef signed char int8_t; 5typedef short int16_t; 6typedef int int32_t; 7typedef unsigned long long uint64_t; 8 9static const uint64_t LOW_BYTE_MASK = 0x00000000000000ffULL; 10static const uint64_t HIGH_BYTE_MASK = 0x000000000000ff00ULL; 11static const uint64_t WORD_MASK = 0x000000000000ffffULL; 12static const uint64_t DWORD_MASK = 0x00000000ffffffffULL; 13 14extern uint64_t *srca_mask; 15extern int *assert_thrown; 16 17void foo() 18{ 19 uint64_t tempA = 0; /* actually a bunch of code to set A */ 20 uint64_t tempB = 0; /* actually a bunch of code to set B */ 21 22 /* cast A to right size */ 23 tempA = (((*srca_mask == LOW_BYTE_MASK) || 24 (*srca_mask == HIGH_BYTE_MASK)) ? 25 ((int8_t)tempA) : 26 ((*srca_mask == WORD_MASK) ? 27 ((int16_t)tempA) : 28 ((*srca_mask == DWORD_MASK) ? 29 ((int32_t)tempA) : 30 tempA))); 31 32 /* cast B to right size */ 33 tempB = (((*srca_mask == LOW_BYTE_MASK) || 34 (*srca_mask == HIGH_BYTE_MASK)) ? 35 ((int8_t)tempB) : 36 ((*srca_mask == WORD_MASK) ? 37 ((int16_t)tempB) : 38 ((*srca_mask == DWORD_MASK) ? 39 ((int32_t)tempB) : 40 tempB))); 41 42 if ((int) tempA > (int) tempB) { 43 *assert_thrown = 1; 44 } 45} 46