[PATCH] Warning for mixing enums of different types
commitca1f2e9ebf33e78c77c79eb695fe88d843b4f978
authorMorten Welinder <terra@gnome.org>
Tue, 28 Mar 2006 20:10:58 +0000 (28 15:10 -0500)
committerLinus Torvalds <torvalds@g5.osdl.org>
Tue, 28 Mar 2006 20:54:00 +0000 (28 12:54 -0800)
tree5bb7922cfabe457791997c6211192dc58fb5702a
parent2cf1f4bba7302d1682fb6c9e4d2b79f88b32df92
[PATCH] Warning for mixing enums of different types

This adds a warning when enums of different types are mixed.  I found a
handful of problems with this in my own code -- nothing that testing
could have revealed at this point, but if someone has added an extra
flag to an enum, things would have gone "boom!"

  typedef enum { A1, A2 } enumA;
  typedef enum { B1 = 10, B2 } enumB;

  static void Afunc (enumA a) { }

  int
  main (int argc, char **argv)
  {
      enumA a = A1;

      switch (A1) {
      case A1: break;
      case A2: break;
      case B1: break;  // Warn
      case B2: break;  // Warn
      default: break;
      }

      switch (1) {
      case A1: break;
      case A2: break;
      case B1: break;  // Warn
      case B2: break;  // Warn
      default: break;
      }

      switch (1) {
      case A1 ... B2: break;  // Warn
      default: break;
      }

      (void)(1 ? a : B1);  // Warn
      (void)(A1 == B1);  // Warn

      (void)(A1 << B1);  // No warning wanted

      a = B1;  // Warn

      Afunc (B1);  // Warn

      return 0;
  }

Signed-off-by: Morten Welinder <terra@gnome.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
evaluate.c
symbol.h