[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Compiling 1.7.0 with gcc-3.3
From: |
Bruce Korb |
Subject: |
Re: Compiling 1.7.0 with gcc-3.3 |
Date: |
Mon, 19 May 2003 09:20:45 -0700 |
Mikael Djurfeldt wrote:
>
> I've tried to compile CVS HEAD (1.7.0) with gcc-3.3.
>
> Of course, I'd like this to work with the default
> --enable-error-on-warning. However, there are two problematic
> instances. One is the use of SCM_STACKITEM. For example:
>
> eval.c:1965:
> if (scm_stack_checking_enabled_p
> && SCM_STACK_OVERFLOW_P ((SCM_STACKITEM *) &proc))
>
> The cast into (SCM_STACKITEM *) causes a warning that the pointer can
> cause errors due to aliasing optimizations if it is dereferenced
> (which it isn't, BTW). -fstrict-aliasing is turned on by -O2 in
> gcc-3.3.
Cast it through a void* cast:
> eval.c:1965:
> if (scm_stack_checking_enabled_p
> && SCM_STACK_OVERFLOW_P ((SCM_STACKITEM *) (void*) &proc))
> Another problem seems more difficult:
>
> gcc -DHAVE_CONFIG_H -I. -I../../../guile-core-new/libguile -I.. -I..
> -I../../../guile-core-new -I../../../guile-core-new/libguile-ltdl -g -O2
> -Werror -Wall -Wmissing-prototypes -Wno-strict-aliasing -MT numbers.lo -MD
> -MP -MF .deps/numbers.Tpo -c ../../../guile-core-new/libguile/numbers.c
> -fPIC -DPIC -o .libs/numbers.lo
> In file included from ../../../guile-core-new/libguile/numbers.c:4084:
> ../../../guile-core-new/libguile/num2integral.i.c: In function
> `scm_num2long_long':
> ../../../guile-core-new/libguile/num2integral.i.c:65: warning: comparison is
> always false due to limited range of data type
> In file included from ../../../guile-core-new/libguile/numbers.c:4092:
> ../../../guile-core-new/libguile/num2integral.i.c: In function
> `scm_num2ulong_long':
> ../../../guile-core-new/libguile/num2integral.i.c:65: warning: comparison is
> always false due to limited range of data type
>
> I think this is a stupid warning message. In any case, you'd want to
> be able to shut it off. I can't find any way to do that. Maybe we
> should talk to the gcc people about this?
Well, your test is: (unsigned long)(some-value) > (unsigned long)~0
and it cannot ever be true. That being the case, delete the code.
Do you really mean: (unsigned long)(some-value) > ((unsigned long)~0)>>1
??
> I've tried to enclose the code causing the warning with a surrounding
> conditional which tests the sizes of the data types, but the compiler
> outputs the above warning even though the code isn't going to be
> compiled.
"isn't going to be compiled" or "would never get executed"?
``#if 0'' should effectively silence it. The preprocessor
knows nothing of this stuff. Clearly, this code gets analyized
before the dead code removal comes along. Maybe put the code under:
#if SIZEOF_SCM_T_BITS > SIZEOF_LONG
Can I get scm_c_eval_string_from_file_line() added, please?
All other solutions have proven intractable.