| Bill Allombert on Thu, 16 Jan 2003 22:10:43 +0100 |
[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:
> On Wed, Jan 15, 2003 at 06:45:12PM +0100, Bill Allombert wrote:
> > Hello PARI developers,
> >
> > Compiling PARI CVS with OSF/1 cc outpout warnings similar to this one
> >
> > /usr/bin/cc -c -O4 -migrate -ifo -Olimit 9999 -I. -I../src/headers -o init.o ../src/language/init.c
> > cc: Warning: ../src/language/init.c, line 1217: In this statement, & before array "__env" is ignored.
> > TRY { x = lisseq(f); } ENDCATCH;
> > ----^
> > 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.
This patch breaks with g++ so it is a bad idea.
Now the problem is that g++ reject longjmp(e, numerr); and gcc reject
longjmp((jmp_buf) e, numerr) so making code that work with both is
difficult.
The problem is that C99 defines jmp_buf as an array of xxx where xxx is
undefined. So we cannot build pointer to xxx, which is different from
array in xxx in C (seemingly less in C++).
The natural solution would be to use xxx * everywhere but we can't,
since we don't know xxx.
Also ANSI C does not allow to dereference array, so &__env is more or less
identical to (xxx *)__env, and this compiler output a warning. What
does C++ in this case seem different.
Note that (xxx *)__env does not match argument type jmp_buf * either.
I do not know if there is a solution outside #ifdef __cplusplus
Cheers,
Bill.