On Tue Sep 16 15:00:24 2008, [EMAIL PROTECTED] wrote: > On Tuesday 16 September 2008 14:47:58 NotFound wrote: > > > > It certainly shouldn't segfault. But, the question is: why does it > > > segfault at 206 parameters? Throwing an exception to avoid an > error we > > > don't understand isn't good for the long-term health of the VM. > > > > The problem is located inside compilers/imcc/pcc.c:pcc_get_args > function. > > > > It has the comment /* XXX check avail len */ just at the point where > > the segfault happens. char buf[1024] is the variable overrunned. > > That sounds like a bog-standard static variable overflow, where each > parameter > requires five bytes of storage. If that's a good rule of thumb, we > could > malloc/free that buffer instead, and then beat anyone who uses more > than a > dozen parameters. > > -- c >
Looking at the code, it's 5n+1. r31200 changes the static buffer to a dynamic one of the correct size. The original PIR code now runs without segfaulting, as does a version with 20,000 int params. make test also passes, so nothing new appears to be broken. With the assumption that the said beatings will be a manual process, I'm marking this resolved.