1*465ab238Srillig /* $NetBSD: msg_376.c,v 1.4 2024/08/31 06:57:31 rillig Exp $ */ 21ec17c71Srillig # 3 "msg_376.c" 31ec17c71Srillig 41ec17c71Srillig // Test for message: '%.*s' overlaps earlier '%.*s' on bit %u [376] 51ec17c71Srillig 61ec17c71Srillig /* 71ec17c71Srillig * When bits and fields overlap, it's often due to typos or off-by-one errors. 81ec17c71Srillig */ 91ec17c71Srillig 101ec17c71Srillig /* lint1-extra-flags: -X 351 */ 111ec17c71Srillig 121ec17c71Srillig typedef typeof(sizeof(0)) size_t; 131ec17c71Srillig typedef unsigned long long uint64_t; 141ec17c71Srillig 151ec17c71Srillig int snprintb(char *, size_t, const char *, uint64_t); 161ec17c71Srillig 171ec17c71Srillig void 181ec17c71Srillig example(unsigned u32, uint64_t u64) 191ec17c71Srillig { 201ec17c71Srillig char buf[64]; 211ec17c71Srillig 221ec17c71Srillig // In the old-style format, bit positions are 1-based. 231ec17c71Srillig snprintb(buf, sizeof(buf), 241ec17c71Srillig "\020" 251ec17c71Srillig "\001lsb" 261ec17c71Srillig "\x01lsb" 271ec17c71Srillig "\040msb" 281ec17c71Srillig "\x20msb" 291ec17c71Srillig "\041oob" 301ec17c71Srillig "\x21oob", 31dae6022bSrillig /* expect+4: warning: '\x01lsb' overlaps earlier '\001lsb' on bit 1 [376] */ 32dae6022bSrillig /* expect+3: warning: escaped character '\041' in description of conversion '\x20msb""\041' [363] */ 33dae6022bSrillig /* expect+2: warning: escaped character '\x21' in description of conversion '\x20msb""\041oob""\x21' [363] */ 34dae6022bSrillig /* expect+1: warning: '\x20msb""\041oob""\x21oob' overlaps earlier '\040msb' on bit 32 [376] */ 351ec17c71Srillig u32); 361ec17c71Srillig 37c9de07fbSrillig // In the new-style format, bit positions are 0-based. 381ec17c71Srillig /* expect+10: warning: 'b\x00lsb\0' overlaps earlier 'b\000lsb\0' on bit 0 [376] */ 391ec17c71Srillig /* expect+9: warning: 'b\x3fmsb\0' overlaps earlier 'b\077msb\0' on bit 63 [376] */ 401ec17c71Srillig /* expect+8: warning: bit position '\x40' (64) in 'b\x40oob\0' out of range 0..63 [371] */ 411ec17c71Srillig snprintb(buf, sizeof(buf), 421ec17c71Srillig "\177\020" 431ec17c71Srillig "b\000lsb\0" 441ec17c71Srillig "b\x00lsb\0" 451ec17c71Srillig "b\077msb\0" 461ec17c71Srillig "b\x3fmsb\0" 471ec17c71Srillig "b\x40oob\0", 481ec17c71Srillig u64); 491ec17c71Srillig 501ec17c71Srillig /* expect+7: warning: 'F\014\010f2\0' overlaps earlier 'f\010\010f1\0' on bit 12 [376] */ 511ec17c71Srillig /* expect+6: warning: 'f\020\010f3\0' overlaps earlier 'F\014\010f2\0' on bit 16 [376] */ 521ec17c71Srillig snprintb(buf, sizeof(buf), 531ec17c71Srillig "\177\020" 541ec17c71Srillig "f\010\010f1\0" 551ec17c71Srillig "F\014\010f2\0" 561ec17c71Srillig "f\020\010f3\0", 571ec17c71Srillig u64); 581ec17c71Srillig } 59