| Ilya Zakharevich on Thu, 16 Jan 2003 12:50:41 -0800 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
| Re: Warning with OSF/1 cc |
On Thu, Jan 16, 2003 at 03:45:40PM +0100, Bill Allombert wrote:
> > cc: Warning: ../src/language/init.c, line 1217: In this statement, the referenced type of the pointer value "&__env" is "long", which is not compatible with "array [84] of long".
> > TRY { x = lisseq(f); } ENDCATCH;
> > ----^
>
> Well the following patch fix this. Whether it is a good idea is left
> as an excercise to the reader.
> -void *err_catch(long errnum, jmp_buf *penv);
> +void *err_catch(long errnum, jmp_buf penv);
1) jmp_buf is *giant* (kilobytes) on some platforms (well, I mean
sigjmp_buf, but we may want to be able to change jmp by sigjmp some
time in the future).
2) If changing the signature of err_catch(), please make it take cell*
too so that the caller may allocate cell on stack. Calls to
malloc()/free() should slow down CATCHing order (or two!) of
magnitude.
This needs to be accompanied by two changes:
a) increase cell by padding with long reserved[10] for ABI extendability;
b) remove the cell from the chain at the end of a successful
block to avoid pointers to stale stack;
I think 'b' may also significantly improve to logic of cell
maintainance; e.g., why not make a linked list?
Hope this helps,
Ilya