------- Comment #4 from rguenth at gcc dot gnu dot org 2006-05-24 17:15 -------
Unfortunately it ICEs during bootstrap compiling mf-runtime.c with
mf-runtime.8.i: In function '__mfu_check':
mf-runtime.8.i:8: internal compiler error: in find_or_generate_expression, at
tree-ssa-pre.c:2279
testcase:
typedef unsigned long int uintptr_t;
unsigned mudflap_mode;
typedef struct __mf_object {
uintptr_t low, high;
} __mf_object_t;
void __mfu_check (void *ptr, unsigned obj_count,
uintptr_t ptr_lower, uintptr_t ptr_higher, __mf_object_t** all_ovr_obj)
{
int judgement = 0;
uintptr_t ptr_low = (uintptr_t) ptr;
uintptr_t ptr_high = (uintptr_t) ptr;
switch (mudflap_mode) {
case 0:
while (judgement == 0)
{
unsigned i;
unsigned uncovered = 0;
for (i = 0; i < obj_count; i++)
{
__mf_object_t *obj = all_ovr_obj[i];
int j, uncovered_low_p, uncovered_high_p;
uncovered_low_p = ptr_low < obj->low;
uncovered_high_p = ptr_high > obj->high;
for (j = 0; j < obj_count; j++)
{
__mf_object_t *obj2 = all_ovr_obj[j];
if (ptr_lower >= obj2->low && ptr_lower <= obj2->high)
uncovered_low_p = 0;
if (ptr_high >= obj2->low && ptr_higher <= obj2->high)
uncovered_high_p = 0;
}
if (uncovered_low_p || uncovered_high_p)
uncovered++;
}
if (uncovered == 0)
judgement = 1;
}
}
}
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=27755