blob: 144c3607f57038ce2ea7618508057201b6ead68d [file] [log] [blame]
Fariborz Jahanian8b115b72013-01-09 23:04:56 +00001// RUN: %clang_cc1 -fsyntax-only -verify -triple x86_64-apple-darwin10 %s
2// RUN: %clang_cc1 -x c++ -fsyntax-only -verify -triple x86_64-apple-darwin10 %s
Charles Li430db1e2015-08-27 18:49:15 +00003// RUN: %clang_cc1 -x c++ -fsyntax-only -verify -triple x86_64-apple-darwin10 -std=c++98 %s
4// RUN: %clang_cc1 -x c++ -fsyntax-only -verify -triple x86_64-apple-darwin10 -std=c++11 %s
Fariborz Jahanian8b115b72013-01-09 23:04:56 +00005// rdar://11577384
Fariborz Jahanian352eeaf2013-03-15 16:36:04 +00006// rdar://13423975
Fariborz Jahanian8b115b72013-01-09 23:04:56 +00007
8int f(int i) {
9 switch (i) {
Charles Li430db1e2015-08-27 18:49:15 +000010 case 2147483647 + 2:
11#if (__cplusplus <= 199711L) // C or C++03 or earlier modes
12 // expected-warning@-2 {{overflow in expression; result is -2147483647 with type 'int'}}
13#else
14 // expected-error@-4 {{case value is not a constant expression}} \
15 // expected-note@-4 {{value 2147483649 is outside the range of representable values of type 'int'}}
16#endif
Fariborz Jahanian8b115b72013-01-09 23:04:56 +000017 return 1;
Charles Li430db1e2015-08-27 18:49:15 +000018 case 9223372036854775807L * 4:
19#if (__cplusplus <= 199711L)
20 // expected-warning@-2 {{overflow in expression; result is -4 with type 'long'}}
21#else
22 // expected-error@-4 {{case value is not a constant expression}} \
23 // expected-note@-4 {{value 36893488147419103228 is outside the range of representable values of type 'long'}}
24#endif
Fariborz Jahanian8b115b72013-01-09 23:04:56 +000025 return 2;
Charles Li430db1e2015-08-27 18:49:15 +000026 case (123456 *789012) + 1:
27#if (__cplusplus <= 199711L)
28 // expected-warning@-2 {{overflow in expression; result is -1375982336 with type 'int'}}
29#else
30 // expected-error@-4 {{case value is not a constant expression}} \
31 // expected-note@-4 {{value 97408265472 is outside the range of representable values of type 'int'}}
32#endif
Fariborz Jahaniane735ff92013-01-24 22:11:45 +000033 return 3;
Charles Li430db1e2015-08-27 18:49:15 +000034 case (2147483647*4)/4:
35#if (__cplusplus <= 199711L)
36 // expected-warning@-2 {{overflow in expression; result is -4 with type 'int'}}
37#else
38 // expected-error@-4 {{case value is not a constant expression}} \
39 // expected-note@-4 {{value 8589934588 is outside the range of representable values of type 'int'}}
40#endif
41 case (2147483647*4)%4:
42#if (__cplusplus <= 199711L)
43 // expected-warning@-2 {{overflow in expression; result is -4 with type 'int'}}
44#else
45 // expected-error@-4 {{case value is not a constant expression}} \
46 // expected-note@-4 {{value 8589934588 is outside the range of representable values of type 'int'}}
47#endif
Fariborz Jahanian352eeaf2013-03-15 16:36:04 +000048 return 4;
Fariborz Jahanian8b115b72013-01-09 23:04:56 +000049 case 2147483647:
50 return 0;
51 }
Fariborz Jahaniand0ed6c22013-01-25 17:47:49 +000052 return (i, 65537) * 65537; // expected-warning {{overflow in expression; result is 131073 with type 'int'}} \
Fariborz Jahanian74039642013-01-25 17:19:07 +000053 // expected-warning {{expression result unused}}
Fariborz Jahanian8b115b72013-01-09 23:04:56 +000054}
Fariborz Jahanianc694e692014-10-14 20:27:05 +000055
56// rdar://18405357
57unsigned long long l = 65536 * 65536; // expected-warning {{overflow in expression; result is 0 with type 'int'}}
58unsigned long long l2 = 65536 * (unsigned)65536;
59unsigned long long l3 = 65536 * 65536ULL;