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