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

Reply via email to