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