On Thu, May 15, 2008 at 2:44 AM, DJ Delorie <[EMAIL PROTECTED]> wrote: > > More digging has identified this patch as the cause of the ongoing > C++-related m32c build failures: > > 2008-03-24 Richard Guenther <[EMAIL PROTECTED]> > > PR c/22371 > * gimplify.c (gimplify_modify_expr): For frontend type-correct > pointer assignments change conversions according to middle-end rules. > (gimplify_modify_expr_rhs): Deal with NULL TARGET_EXPR_INITIAL. > * configure.ac: Include type checking in yes. > * configure: Regenerate. > > In file included from ../../../../../gcc/libstdc++-v3/src/strstream.cc:50: > > /greed/dj/m32c/gcc/m32c-elf/m32c-elf/m32cm/libstdc++-v3/include/backward/strstream: > In member function 'void std::ostrstream::_ZTv0_n12_NSt10ostrstreamD0Ev()': > > /greed/dj/m32c/gcc/m32c-elf/m32c-elf/m32cm/libstdc++-v3/include/backward/strstream:142: > error: invalid types in nop conversion > unsigned int > int (*__vtbl_ptr_type) (void) > > D.25530 = (unsigned int) D.25529 > > /greed/dj/m32c/gcc/m32c-elf/m32c-elf/m32cm/libstdc++-v3/include/backward/strstream:142: > internal compiler error: verify_gimple failed > > I have a .ii file and command line, but it's 560kb (-mcpu=m32cm build > of strstream.cc in libstdc++) > > Note that --enable-checking=none lets the build pass (as of the 25th) > but I haven't yet tried testing to see if proper code is generated. > Thus, I don't know if the patch caused the bug, or exposed it.
The patch simply enabled type checking by default. As I don't see how we can easily address the underlying problem can you try the following which simply makes this typechecking weaker? Index: tree-cfg.c =================================================================== --- tree-cfg.c (revision 135328) +++ tree-cfg.c (working copy) @@ -3643,7 +3643,8 @@ verify_gimple_expr (tree expr) there is no sign or zero extension involved. */ if (((POINTER_TYPE_P (type) && INTEGRAL_TYPE_P (TREE_TYPE (op))) || (POINTER_TYPE_P (TREE_TYPE (op)) && INTEGRAL_TYPE_P (type))) - && TYPE_PRECISION (type) == TYPE_PRECISION (TREE_TYPE (op))) + && (TYPE_PRECISION (type) == TYPE_PRECISION (TREE_TYPE (op)) + || type == sizetype || TREE_TYPE (op) == sizetype)) return false; /* Allow conversion from integer to offset type and vice versa. */ Thanks, Richard.