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]

gcc doesn't warn that (unsigned > 0) is always true


Hi all,

This may be a bit stupid, but as I run into problem once because of
this...
I think gcc should warn about it when "-Wall" is set.

Consider the following snip of code:


/* gcc (3.3.2 with -Wall and -pedantic)
 * doesn't warn that (unsigned > 0) is always true.
 */

#include <stdio.h>

void a_loop (unsigned int in) {
  int dumb = 0;
  do {
    ++dumb; /* anything here */

    /* Well, a lot of code can be here,
     * almost all variables int _signed_,
     * so a programmer may overlook that 'in' is_unsigned_  
     */
  } while (--in > 0);

  /* variable 'in' will be NEVER less than zero (it's unsigned),
   * this is in fact an *endless* loop.
   * It should be obvious that it wasn't programmer intention.
   * Shouldn't gcc with -Wall warn about it?             
   * Shouldn't gcc warn about all such obviously mistaken checks
   * (unsigned > 0) that are always true?
   */
}

int main (void) {

  a_loop (0);

  return 0; /* never achieved */
}



-- 
David Calinski


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