On Thu, 2013-01-31 at 18:36 +0100, Thomas Sailer wrote: > What is the status of the port to gcc 4.7.2? Is svn150 supposed to be > complete? > SVN R150 does seem to be a work-in-progress to me. I cannot build it here unchanged using my build flow, but it fails earlier with a different error (building libstdc++ with the new compiler).
I posted about that on Dec 11 but nobody seemed to have any suggestions. https://mail.gna.org/public/ghdl-discuss/2012-12/msg00007.html The problem is a name clash between GHDL's -P argument (set VHDL library path) and a different meaning for -P in the C compiler. This was resolved in a temporary manner in my big patch (I renamed the option -LP). R150 is much cleaner than my patches to R143, but though most of my changes were adopted or improved, this one was not. You could try applying my big patch of October 17 https://mail.gna.org/public/ghdl-discuss/2012-10/msg00007.html on top of SVN R143 as an interim measure. > When trying to build, I get an ICE during compilation of the standard > library. > ../../../src/std/textio_body.v93:337:0: internal compiler error: in > build_vector, at tree.c:1341 > Is this known? Are you building for 64 bits? This is known and was fixed in my big patch, but the fix was not adopted in R150. I believe it may only occur when building for 64 bits; it is possible R150 was successfully tested as a 32 bit build. Turn on "tree-checking" and you get a bit more information: ../../../src/std/textio_body.v93:337:0: internal compiler error: tree check: expected vector_type, have integer_type in build_vector, at tree.c:1343 If this is the only problem you have with R150, replace "type_for_size" in gcc/vhdl/ortho-lang.c with: ----------------------------------------------------------------------- static tree type_for_size (unsigned int precision, int unsignedp) { tree t; if (precision <= MAX_BITS_PER_WORD && signed_and_unsigned_types[precision][unsignedp] != NULL_TREE) return signed_and_unsigned_types[precision][unsignedp]; if (unsignedp) t = make_unsigned_type (precision); else t = make_signed_type (precision); if (precision <= MAX_BITS_PER_WORD) signed_and_unsigned_types[precision][unsignedp] = t; else // Handle larger requests by returning a NULL tree and letting // the back end default to another approach. t = NULL_TREE; return t; } ----------------------------------------------------------------------- The original fails for (precision > MAX_BITS_PER_WORD) but something is asking for 128 bits of precision here. Which is probably why the point of failure expects a vector and sees the signed or unsigned type (not big enough!) from this function. Now there may be a better fix in identifying that something, and correcting it if it is wrong, but I didn't have enough knowledge to find it. I hope this helps, - Brian _______________________________________________ Ghdl-discuss mailing list [email protected] https://mail.gna.org/listinfo/ghdl-discuss
