/* PR optimization/14235 */ /* Origin: */ typedef signed char int8_t; typedef short int16_t; typedef int int32_t; typedef unsigned long long uint64_t; static const uint64_t LOW_BYTE_MASK = 0x00000000000000ffULL; static const uint64_t HIGH_BYTE_MASK = 0x000000000000ff00ULL; static const uint64_t WORD_MASK = 0x000000000000ffffULL; static const uint64_t DWORD_MASK = 0x00000000ffffffffULL; extern uint64_t *srca_mask; extern int *assert_thrown; void foo() { uint64_t tempA = 0; /* actually a bunch of code to set A */ uint64_t tempB = 0; /* actually a bunch of code to set B */ /* cast A to right size */ tempA = (((*srca_mask == LOW_BYTE_MASK) || (*srca_mask == HIGH_BYTE_MASK)) ? ((int8_t)tempA) : ((*srca_mask == WORD_MASK) ? ((int16_t)tempA) : ((*srca_mask == DWORD_MASK) ? ((int32_t)tempA) : tempA))); /* cast B to right size */ tempB = (((*srca_mask == LOW_BYTE_MASK) || (*srca_mask == HIGH_BYTE_MASK)) ? ((int8_t)tempB) : ((*srca_mask == WORD_MASK) ? ((int16_t)tempB) : ((*srca_mask == DWORD_MASK) ? ((int32_t)tempB) : tempB))); if ((int) tempA > (int) tempB) { *assert_thrown = 1; } }