1 1.3 rillig /* $NetBSD: msg_378.c,v 1.3 2024/08/31 06:57:32 rillig Exp $ */ 2 1.1 rillig # 3 "msg_378.c" 3 1.1 rillig 4 1.2 rillig // Test for message: conversion '%.*s' is unreachable by input value [378] 5 1.1 rillig 6 1.1 rillig /* 7 1.1 rillig * The typical use case of snprintb is to have a format that is specifically 8 1.1 rillig * tailored to a particular input value. Often, a format is only used in a 9 1.1 rillig * single place. Therefore, bits that are unreachable are redundant and may 10 1.1 rillig * hint at typos. 11 1.1 rillig */ 12 1.1 rillig 13 1.1 rillig /* lint1-extra-flags: -X 351 */ 14 1.1 rillig 15 1.1 rillig typedef typeof(sizeof(0)) size_t; 16 1.1 rillig typedef unsigned long long uint64_t; 17 1.1 rillig 18 1.3 rillig int snprintb(char *, size_t, const char *, uint64_t); 19 1.1 rillig 20 1.1 rillig void 21 1.1 rillig example(unsigned u32, uint64_t u64) 22 1.1 rillig { 23 1.1 rillig char buf[64]; 24 1.1 rillig 25 1.2 rillig /* expect+5: warning: conversion '\040bit32' is unreachable by input value [378] */ 26 1.1 rillig snprintb(buf, sizeof(buf), 27 1.1 rillig "\020" 28 1.1 rillig "\037bit31" 29 1.1 rillig "\040bit32", 30 1.1 rillig u32 >> 1); 31 1.1 rillig 32 1.2 rillig /* expect+5: warning: conversion 'b\075bit61\0' is unreachable by input value [378] */ 33 1.1 rillig snprintb(buf, sizeof(buf), 34 1.1 rillig "\177\020" 35 1.1 rillig "b\074bit60\0" 36 1.1 rillig "b\075bit61\0", 37 1.1 rillig u64 >> 3); 38 1.1 rillig 39 1.2 rillig /* expect+12: warning: conversion 'b\000bit0\0' is unreachable by input value [378] */ 40 1.2 rillig /* expect+11: warning: conversion 'b\011bit9\0' is unreachable by input value [378] */ 41 1.2 rillig /* expect+10: warning: conversion 'f\017\002bits15-16\0' is unreachable by input value [378] */ 42 1.2 rillig /* expect+9: warning: conversion 'f\050\030bits40-63\0' is unreachable by input value [378] */ 43 1.1 rillig snprintb(buf, sizeof(buf), 44 1.1 rillig "\177\020" 45 1.1 rillig "b\000bit0\0" 46 1.1 rillig "b\010bit8\0" 47 1.1 rillig "b\011bit9\0" 48 1.1 rillig "f\012\002bits10-11\0" 49 1.1 rillig "f\017\002bits15-16\0" 50 1.1 rillig "f\050\030bits40-63\0", 51 1.1 rillig (u32 & 0xaa55aa55) << 8); 52 1.1 rillig } 53