bug-guile
[Top][All Lists]
Advanced

[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.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]