Hello,

On Tue, 10 Dec 2019, Herman ten Brugge via Tinycc-devel wrote:

> I still have one small problem with testcase 111_conversion.c
> 
> The problem is that it fails on i386.c (linux) when compiling with:
> tcc 111_conversion.c -o 111_conversion -b
> ./111_conversion
>  
> I fixed this (and commited it in git) with the following patch in tccgen.c:
> 
>                 if ((p->r2 & VT_VALMASK) < VT_CONST) {
>                     size *= 2;
>                     align *= 2;
>                 }

I've analyzed this now and pushed something slightly different with a 
comment.  It boils down to the above being a work-around for an 
inconsistency between types and r2 entries in the vstack.  My variant is 
also just a work-around.  Unfortunately there are many places in TCC that 
aren't careful with this, so the real fixes have to wait until someone has 
more time at hand.  I guess adding asserts at strategic places and then 
fixing them until they don't hit anymore is the simplest, but still a bit 
of work.  (The asserts would test that a vstack entry has a large type 
that really requires two registers or has VT_CONST in r2).


Ciao,
Michael.
_______________________________________________
Tinycc-devel mailing list
Tinycc-devel@nongnu.org
https://lists.nongnu.org/mailman/listinfo/tinycc-devel

Reply via email to