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