shift.c revision ba772ba69ba0661f059f49c58395f870eb5c4df3
1// RUN: %clang -Wall -ffreestanding -fsyntax-only -Xclang -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; 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; 23 c >>= 0; 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 37#define a 0 38#define ashift 8 39enum { b = (a << ashift) }; 40 41