[Bug optimization/14235] [3.4/3.5 Regression] ICE in verify_local_live_at start (flow.c:546)

senor_fjord at yahoo dot com gcc-bugzilla@gcc.gnu.org
Mon Mar 1 05:24:00 GMT 2004


------- Additional Comments From senor_fjord at yahoo dot com  2004-03-01 05:24 -------
You're exactly right.  I did a poor job of distilling the program.  The following is something more 
representative of the actual program.  I don't believe there is anything obviously dumb about the 
following code, which ICEs in the same way.  Sorry for the confusion.

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;

int main() {
  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;
  }
}


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14235



More information about the Gcc-bugs mailing list