shift.c revision d0439688fea4dedc28125d246bbdec1f5a208660
1// RUN: clang-cc -Wall -fsyntax-only -verify %s
2
3#include <limits.h>
4
5enum {
6  X = 1 << 0,
7  Y = 1 << 1,
8  Z = 1 << 2
9};
10
11void test() {
12  char c;
13
14  c = 0 << 0;
15  c = 0 << 1; // expected-warning {{no effect}}
16  c = 1 << 0;
17  c = 1 << -0;
18  c = 1 >> -0;
19  c = 1 << -1; // expected-warning {{shift count is negative}}
20  c = 1 >> -1; // expected-warning {{shift count is negative}}
21  c = 1 << c;
22  c <<= 0; // expected-warning {{no effect}}
23  c >>= 0; // expected-warning {{no effect}}
24  c <<= 1;
25  c >>= 1;
26  c <<= -1; // expected-warning {{shift count is negative}}
27  c >>= -1; // expected-warning {{shift count is negative}}
28  c <<= 999999; // expected-warning {{shift count >= width of type}}
29  c >>= 999999; // expected-warning {{shift count >= width of type}}
30  c <<= CHAR_BIT; // expected-warning {{shift count >= width of type}}
31  c >>= CHAR_BIT; // expected-warning {{shift count >= width of type}}
32  c <<= CHAR_BIT+1; // expected-warning {{shift count >= width of type}}
33  c >>= CHAR_BIT+1; // expected-warning {{shift count >= width of type}}
34  (void)((long)c << CHAR_BIT);
35}
36