self-comparison.c revision 3573b2c84372d9484296fa658f5276f6c09acb92
13573b2c84372d9484296fa658f5276f6c09acb92Daniel Dunbar// RUN: %clang_cc1 -fsyntax-only -verify %s 2cf8b77d47f0c9dde19da4de74e42f095a7cc2723Ted Kremenek 3cf8b77d47f0c9dde19da4de74e42f095a7cc2723Ted Kremenekint foo(int x) { 4cf8b77d47f0c9dde19da4de74e42f095a7cc2723Ted Kremenek return x == x; // expected-warning {{self-comparison always results}} 5cf8b77d47f0c9dde19da4de74e42f095a7cc2723Ted Kremenek} 6cf8b77d47f0c9dde19da4de74e42f095a7cc2723Ted Kremenek 7cf8b77d47f0c9dde19da4de74e42f095a7cc2723Ted Kremenekint foo2(int x) { 8cf8b77d47f0c9dde19da4de74e42f095a7cc2723Ted Kremenek return (x) != (((x))); // expected-warning {{self-comparison always results}} 9cf8b77d47f0c9dde19da4de74e42f095a7cc2723Ted Kremenek} 10cf8b77d47f0c9dde19da4de74e42f095a7cc2723Ted Kremenek 114926e10989b2877ed9558c0cff01816d18a6b9beTed Kremenekint qux(int x) { 124926e10989b2877ed9558c0cff01816d18a6b9beTed Kremenek return x < x; // expected-warning {{self-comparison}} 134926e10989b2877ed9558c0cff01816d18a6b9beTed Kremenek} 144926e10989b2877ed9558c0cff01816d18a6b9beTed Kremenek 154926e10989b2877ed9558c0cff01816d18a6b9beTed Kremenekint qux2(int x) { 164926e10989b2877ed9558c0cff01816d18a6b9beTed Kremenek return x > x; // expected-warning {{self-comparison}} 174926e10989b2877ed9558c0cff01816d18a6b9beTed Kremenek} 184926e10989b2877ed9558c0cff01816d18a6b9beTed Kremenek 19cf8b77d47f0c9dde19da4de74e42f095a7cc2723Ted Kremenekint bar(float x) { 20cf8b77d47f0c9dde19da4de74e42f095a7cc2723Ted Kremenek return x == x; // no-warning 21cf8b77d47f0c9dde19da4de74e42f095a7cc2723Ted Kremenek} 22cf8b77d47f0c9dde19da4de74e42f095a7cc2723Ted Kremenek 23cf8b77d47f0c9dde19da4de74e42f095a7cc2723Ted Kremenekint bar2(float x) { 24cf8b77d47f0c9dde19da4de74e42f095a7cc2723Ted Kremenek return x != x; // no-warning 254926e10989b2877ed9558c0cff01816d18a6b9beTed Kremenek} 26f042dc6c65345b02bc7bbda6a57a4554c1135676Ted Kremenek 27f042dc6c65345b02bc7bbda6a57a4554c1135676Ted Kremenek// Motivated by <rdar://problem/6703892>, self-comparisons of enum constants 28f042dc6c65345b02bc7bbda6a57a4554c1135676Ted Kremenek// should not be warned about. These can be expanded from macros, and thus 29f042dc6c65345b02bc7bbda6a57a4554c1135676Ted Kremenek// are usually deliberate. 30f042dc6c65345b02bc7bbda6a57a4554c1135676Ted Kremenekint compare_enum() { 31f042dc6c65345b02bc7bbda6a57a4554c1135676Ted Kremenek enum { A }; 32f042dc6c65345b02bc7bbda6a57a4554c1135676Ted Kremenek return A == A; // no-warning 33f042dc6c65345b02bc7bbda6a57a4554c1135676Ted Kremenek} 34