This patch implements most of -Wenum-compare in Clang. I know of at least on difference between this implementation and GCC: this is currently on by default for all languages. In GCC -Wenum-compare is only turned on with -Wall in C/ObjC, but is on by default in C++. I'm happy either leaving as is (and it always being on by default) or if someone has a suggestion for how to model GCC's behavior I'm happy to do that. There may be other differences in the nature of the implementation, I'm not familiar with GCC's.