115a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian// RUN: %clang_cc1 -triple x86_64-apple-darwin -fsyntax-only -Wtautological-constant-out-of-range-compare -verify %s 215a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian// rdar://12202422 315a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian 415a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanianint value(void); 515a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian 615a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanianint main() 715a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian{ 815a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian int a = value(); 9a193f20916f0e0e5a3b0f76ca69e2b3870c1a325Fariborz Jahanian if (a == 0x1234567812345678L) // expected-warning {{comparison of constant 1311768465173141112 with expression of type 'int' is always false}} 1015a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian return 0; 11a193f20916f0e0e5a3b0f76ca69e2b3870c1a325Fariborz Jahanian if (a != 0x1234567812345678L) // expected-warning {{comparison of constant 1311768465173141112 with expression of type 'int' is always true}} 1215a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian return 0; 13a193f20916f0e0e5a3b0f76ca69e2b3870c1a325Fariborz Jahanian if (a < 0x1234567812345678L) // expected-warning {{comparison of constant 1311768465173141112 with expression of type 'int' is always true}} 1415a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian return 0; 15a193f20916f0e0e5a3b0f76ca69e2b3870c1a325Fariborz Jahanian if (a <= 0x1234567812345678L) // expected-warning {{comparison of constant 1311768465173141112 with expression of type 'int' is always true}} 1615a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian return 0; 17a193f20916f0e0e5a3b0f76ca69e2b3870c1a325Fariborz Jahanian if (a > 0x1234567812345678L) // expected-warning {{comparison of constant 1311768465173141112 with expression of type 'int' is always false}} 1815a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian return 0; 19a193f20916f0e0e5a3b0f76ca69e2b3870c1a325Fariborz Jahanian if (a >= 0x1234567812345678L) // expected-warning {{comparison of constant 1311768465173141112 with expression of type 'int' is always false}} 2015a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian return 0; 2115a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian 22a193f20916f0e0e5a3b0f76ca69e2b3870c1a325Fariborz Jahanian if (0x1234567812345678L == a) // expected-warning {{comparison of constant 1311768465173141112 with expression of type 'int' is always false}} 2315a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian return 0; 24a193f20916f0e0e5a3b0f76ca69e2b3870c1a325Fariborz Jahanian if (0x1234567812345678L != a) // expected-warning {{comparison of constant 1311768465173141112 with expression of type 'int' is always true}} 2515a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian return 0; 26a193f20916f0e0e5a3b0f76ca69e2b3870c1a325Fariborz Jahanian if (0x1234567812345678L < a) // expected-warning {{comparison of constant 1311768465173141112 with expression of type 'int' is always false}} 2715a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian return 0; 28a193f20916f0e0e5a3b0f76ca69e2b3870c1a325Fariborz Jahanian if (0x1234567812345678L <= a) // expected-warning {{comparison of constant 1311768465173141112 with expression of type 'int' is always false}} 2915a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian return 0; 30a193f20916f0e0e5a3b0f76ca69e2b3870c1a325Fariborz Jahanian if (0x1234567812345678L > a) // expected-warning {{comparison of constant 1311768465173141112 with expression of type 'int' is always true}} 3115a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian return 0; 32a193f20916f0e0e5a3b0f76ca69e2b3870c1a325Fariborz Jahanian if (0x1234567812345678L >= a) // expected-warning {{comparison of constant 1311768465173141112 with expression of type 'int' is always true}} 3315a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian return 0; 34a193f20916f0e0e5a3b0f76ca69e2b3870c1a325Fariborz Jahanian if (a == 0x1234567812345678LL) // expected-warning {{comparison of constant 1311768465173141112 with expression of type 'int' is always false}} 3515a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian return 0; 36a193f20916f0e0e5a3b0f76ca69e2b3870c1a325Fariborz Jahanian if (a == -0x1234567812345678L) // expected-warning {{comparison of constant -1311768465173141112 with expression of type 'int' is always false}} 3715a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian return 0; 38a193f20916f0e0e5a3b0f76ca69e2b3870c1a325Fariborz Jahanian if (a < -0x1234567812345678L) // expected-warning {{comparison of constant -1311768465173141112 with expression of type 'int' is always false}} 3915a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian return 0; 40a193f20916f0e0e5a3b0f76ca69e2b3870c1a325Fariborz Jahanian if (a > -0x1234567812345678L) // expected-warning {{comparison of constant -1311768465173141112 with expression of type 'int' is always true}} 4115a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian return 0; 42a193f20916f0e0e5a3b0f76ca69e2b3870c1a325Fariborz Jahanian if (a <= -0x1234567812345678L) // expected-warning {{comparison of constant -1311768465173141112 with expression of type 'int' is always false}} 4315a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian return 0; 44a193f20916f0e0e5a3b0f76ca69e2b3870c1a325Fariborz Jahanian if (a >= -0x1234567812345678L) // expected-warning {{comparison of constant -1311768465173141112 with expression of type 'int' is always true}} 4515a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian return 0; 4615a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian 4715a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian 4815a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian if (a == 0x12345678L) // no warning 4915a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian return 1; 5015a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian 5115a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian short s = value(); 52a193f20916f0e0e5a3b0f76ca69e2b3870c1a325Fariborz Jahanian if (s == 0x1234567812345678L) // expected-warning {{comparison of constant 1311768465173141112 with expression of type 'short' is always false}} 5315a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian return 0; 54a193f20916f0e0e5a3b0f76ca69e2b3870c1a325Fariborz Jahanian if (s != 0x1234567812345678L) // expected-warning {{comparison of constant 1311768465173141112 with expression of type 'short' is always true}} 5515a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian return 0; 56a193f20916f0e0e5a3b0f76ca69e2b3870c1a325Fariborz Jahanian if (s < 0x1234567812345678L) // expected-warning {{comparison of constant 1311768465173141112 with expression of type 'short' is always true}} 5715a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian return 0; 58a193f20916f0e0e5a3b0f76ca69e2b3870c1a325Fariborz Jahanian if (s <= 0x1234567812345678L) // expected-warning {{comparison of constant 1311768465173141112 with expression of type 'short' is always true}} 5915a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian return 0; 60a193f20916f0e0e5a3b0f76ca69e2b3870c1a325Fariborz Jahanian if (s > 0x1234567812345678L) // expected-warning {{comparison of constant 1311768465173141112 with expression of type 'short' is always false}} 6115a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian return 0; 62a193f20916f0e0e5a3b0f76ca69e2b3870c1a325Fariborz Jahanian if (s >= 0x1234567812345678L) // expected-warning {{comparison of constant 1311768465173141112 with expression of type 'short' is always false}} 6315a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian return 0; 6415a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian 65a193f20916f0e0e5a3b0f76ca69e2b3870c1a325Fariborz Jahanian if (0x1234567812345678L == s) // expected-warning {{comparison of constant 1311768465173141112 with expression of type 'short' is always false}} 6615a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian return 0; 67a193f20916f0e0e5a3b0f76ca69e2b3870c1a325Fariborz Jahanian if (0x1234567812345678L != s) // expected-warning {{comparison of constant 1311768465173141112 with expression of type 'short' is always true}} 6815a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian return 0; 69a193f20916f0e0e5a3b0f76ca69e2b3870c1a325Fariborz Jahanian if (0x1234567812345678L < s) // expected-warning {{comparison of constant 1311768465173141112 with expression of type 'short' is always false}} 7015a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian return 0; 71a193f20916f0e0e5a3b0f76ca69e2b3870c1a325Fariborz Jahanian if (0x1234567812345678L <= s) // expected-warning {{comparison of constant 1311768465173141112 with expression of type 'short' is always false}} 7215a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian return 0; 73a193f20916f0e0e5a3b0f76ca69e2b3870c1a325Fariborz Jahanian if (0x1234567812345678L > s) // expected-warning {{comparison of constant 1311768465173141112 with expression of type 'short' is always true}} 7415a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian return 0; 75a193f20916f0e0e5a3b0f76ca69e2b3870c1a325Fariborz Jahanian if (0x1234567812345678L >= s) // expected-warning {{comparison of constant 1311768465173141112 with expression of type 'short' is always true}} 7615a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian return 0; 7715a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian long l = value(); 7815a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian if (l == 0x1234567812345678L) 7915a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian return 0; 8015a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian if (l != 0x1234567812345678L) 8115a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian return 0; 8215a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian if (l < 0x1234567812345678L) 8315a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian return 0; 8415a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian if (l <= 0x1234567812345678L) 8515a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian return 0; 8615a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian if (l > 0x1234567812345678L) 8715a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian return 0; 8815a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian if (l >= 0x1234567812345678L) 8915a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian return 0; 9015a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian 9115a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian if (0x1234567812345678L == l) 9215a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian return 0; 9315a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian if (0x1234567812345678L != l) 9415a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian return 0; 9515a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian if (0x1234567812345678L < l) 9615a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian return 0; 9715a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian if (0x1234567812345678L <= l) 9815a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian return 0; 9915a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian if (0x1234567812345678L > l) 10015a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian return 0; 10115a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian if (0x1234567812345678L >= l) 10215a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian return 0; 10315a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian 10415a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian unsigned un = 0; 10515a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian if (un == 0x0000000000000000L) 10615a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian return 0; 10715a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian if (un != 0x0000000000000000L) 10815a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian return 0; 10915a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian if (un < 0x0000000000000000L) 11015a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian return 0; 11115a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian if (un <= 0x0000000000000000L) 11215a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian return 0; 11315a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian if (un > 0x0000000000000000L) 11415a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian return 0; 11515a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian if (un >= 0x0000000000000000L) 11615a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian return 0; 11715a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian 11815a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian if (0x0000000000000000L == un) 11915a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian return 0; 12015a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian if (0x0000000000000000L != un) 12115a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian return 0; 12215a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian if (0x0000000000000000L < un) 12315a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian return 0; 12415a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian if (0x0000000000000000L <= un) 12515a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian return 0; 12615a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian if (0x0000000000000000L > un) 12715a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian return 0; 12815a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian if (0x0000000000000000L >= un) 12915a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian return 0; 13015a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian float fl = 0; 13115a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian if (fl == 0x0000000000000000L) // no warning 13215a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian return 0; 13315a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian 13415a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian float dl = 0; 13515a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian if (dl == 0x0000000000000000L) // no warning 13615a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian return 0; 13715a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian 13815a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian enum E { 13915a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian yes, 14015a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian no, 14115a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian maybe 14215a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian }; 14315a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian enum E e; 14415a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian 145a193f20916f0e0e5a3b0f76ca69e2b3870c1a325Fariborz Jahanian if (e == 0x1234567812345678L) // expected-warning {{comparison of constant 1311768465173141112 with expression of type 'enum E' is always false}} 14615a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian return 0; 14715a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian 14815a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian return 1; 14915a9356464f0809e1cb24aa3a7cc2577914ff5bbFariborz Jahanian} 150