On Jan 13, 2012, at 10:30 AM, Richard Guenther wrote: > On Fri, Jan 13, 2012 at 12:09 AM, DJ Delorie <d...@redhat.com> wrote: >> >> Another case where one address space may support multiple pointer >> sizes, so conversions between such must be preserved. >> >> * tree-ssa.c (useless_type_conversion_p): Conversions between >> different-sized pointers aren't useless. >> >> Index: tree-ssa.c >> =================================================================== >> --- tree-ssa.c (revision 183139) >> +++ tree-ssa.c (working copy) >> @@ -1192,12 +1192,17 @@ bool >> useless_type_conversion_p (tree outer_type, tree inner_type) >> { >> /* Do the following before stripping toplevel qualifiers. */ >> if (POINTER_TYPE_P (inner_type) >> && POINTER_TYPE_P (outer_type)) >> { >> + /* Do not lose casts between pointers of different precision. */ >> + if (TYPE_PRECISION (outer_type) >> + != TYPE_PRECISION (inner_type)) >> + return false; >> + >> /* Do not lose casts between pointers to different address spaces. */ >> if (TYPE_ADDR_SPACE (TREE_TYPE (outer_type)) >> != TYPE_ADDR_SPACE (TREE_TYPE (inner_type))) >> return false; >> >> /* If the outer type is (void *), the conversion is not necessary. */ > > That should not be necessary as there is a mode check below. Do you > hit the issue only when the VOID_TYPE_P check is true? In that case > simply delete it - it has become obsolete.
We hit the same issue for VMS while compiling libada. I just checked that removing the check fixes the crash. Just for the record. Tristan.