This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: no warning on mixing unsigned and signed



>I been alerted to a bug in gcc-3.0.4 and 2.96(yeah, I know its a
>release from RH, but I don't have a 2.95.3 version handy), the
>following code when built using '-O -Wall' doesn't warn that the
>comparison can not be false, and converts 'foo' into an empty function
>since (a-b) can not be negative: 
>
>extern void bar(void);
>void foo(int a, unsigned int b)
>{
>  if ((a - b) < 0)
>    bar();
>}
>
>If a is unsigned, or the expression is (a < 0) the results are the same...

Arrrggghh; fat fingered that badly.  It should've been:

I been alerted to a bug in gcc-3.0.4 and 2.96(yeah, I know its a
release from RH, but I don't have a 2.95.3 version handy), the
following code when built using '-O -Wall' doesn't warn that the
comparison can not be *true*, and converts 'foo' into an empty function
since (a-b) can not be negative: 

extern void bar(void);
void foo(int a, unsigned int b)
{
  if ((a - b) < 0)
    bar();
}

If a is unsigned, *and if* the expression is (a < 0) the results are
the same... 

-- 
Peter Barada                                   Peter.Barada@motorola.com
Wizard                                         781-852-2768 (direct)
WaveMark Solutions(wholly owned by Motorola)   781-270-0193 (fax)


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]