1 1.8 rillig /* $NetBSD: msg_117.c,v 1.8 2021/08/27 17:49:31 rillig Exp $ */ 2 1.1 rillig # 3 "msg_117.c" 3 1.1 rillig 4 1.4 rillig // Test for message: bitwise '%s' on signed value possibly nonportable [117] 5 1.1 rillig 6 1.2 rillig /* lint1-extra-flags: -p */ 7 1.2 rillig 8 1.2 rillig int 9 1.2 rillig shr(int a, int b) 10 1.2 rillig { 11 1.3 rillig return a >> b; /* expect: 117 */ 12 1.2 rillig } 13 1.2 rillig 14 1.2 rillig int 15 1.2 rillig shr_lhs_constant_positive(int a) 16 1.2 rillig { 17 1.2 rillig return 0x1234 >> a; 18 1.2 rillig } 19 1.2 rillig 20 1.2 rillig int 21 1.2 rillig shr_lhs_constant_negative(int a) 22 1.2 rillig { 23 1.3 rillig return -0x1234 >> a; /* expect: 120 */ 24 1.2 rillig } 25 1.2 rillig 26 1.2 rillig int 27 1.2 rillig shr_rhs_constant_positive(int a) 28 1.2 rillig { 29 1.5 rillig return a >> 0x1234; /* expect: 117 *//* expect: 122 */ 30 1.2 rillig } 31 1.2 rillig 32 1.2 rillig int 33 1.2 rillig shr_rhs_constant_negative(int a) 34 1.2 rillig { 35 1.5 rillig return a >> -0x1234; /* expect: 117 *//* expect: 121 */ 36 1.2 rillig } 37 1.6 rillig 38 1.6 rillig unsigned int 39 1.6 rillig shr_unsigned_char(unsigned char uc) 40 1.6 rillig { 41 1.7 rillig /* 42 1.7 rillig * Even though 'uc' is promoted to 'int', it cannot be negative. 43 1.7 rillig * Before tree.c 1.335 from 2021-08-15, lint wrongly warned that 44 1.7 rillig * 'uc >> 4' might be a bitwise '>>' on signed value. 45 1.7 rillig */ 46 1.6 rillig return uc >> 4; 47 1.6 rillig } 48 1.8 rillig 49 1.8 rillig unsigned char 50 1.8 rillig shr_unsigned_char_promoted(unsigned char bit) 51 1.8 rillig { 52 1.8 rillig /* 53 1.8 rillig * Before TODO from TODO, lint wrongly warned that the bitwise shift 54 1.8 rillig * might be on a signed value, which was wrong. Even though the 55 1.8 rillig * expression has type 'int', the value of the expression cannot be 56 1.8 rillig * negative, as long as int is larger than char, which holds for all 57 1.8 rillig * platforms supported by lint. 58 1.8 rillig */ 59 1.8 rillig /* expect+1: warning: bitwise '>>' on signed value possibly nonportable [117] */ 60 1.8 rillig return (unsigned char)((bit - 1) >> 5); 61 1.8 rillig } 62