This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug optimization/14235] [3.4/3.5 Regression] ICE in verify_local_live_at start (flow.c:546)
- From: "senor_fjord at yahoo dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 1 Mar 2004 05:24:46 -0000
- Subject: [Bug optimization/14235] [3.4/3.5 Regression] ICE in verify_local_live_at start (flow.c:546)
- References: <20040221043216.14235.senor_fjord@yahoo.com>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- 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