Home | History | Annotate | Line # | Download | only in lint1
msg_367.c revision 1.4
      1 /*	$NetBSD: msg_367.c,v 1.4 2025/08/31 20:43:27 rillig Exp $	*/
      2 # 3 "msg_367.c"
      3 
      4 // Test for message: empty description in '%.*s' [367]
      5 
      6 /*
      7  * Each bit or field or comparison value gets a description.  If such a
      8  * description is empty, the generated output will contain empty angle
      9  * brackets or multiple adjacent commas or commas adjacent to an angle
     10  * bracket, such as '<,,,,>'.
     11  */
     12 
     13 /* lint1-extra-flags: -X 351 */
     14 
     15 typedef typeof(sizeof(0)) size_t;
     16 typedef unsigned long long uint64_t;
     17 
     18 int snprintb(char *, size_t, const char *, uint64_t);
     19 
     20 void
     21 old_style(unsigned u32)
     22 {
     23 	char buf[64];
     24 
     25 	/* expect+10: warning: empty description in '\001' [367] */
     26 	/* expect+9: warning: empty description in '\002' [367] */
     27 	/* expect+8: warning: empty description in '\003' [367] */
     28 	/* expect+7: warning: empty description in '\004' [367] */
     29 	snprintb(buf, sizeof(buf),
     30 	    "\020"
     31 	    "\001"
     32 	    "\002"
     33 	    "\003"
     34 	    "\004",
     35 	    u32);
     36 
     37 	/* expect+10: warning: empty description in '\001' [367] */
     38 	/* expect+9: warning: empty description in '\002' [367] */
     39 	/* expect+8: warning: empty description in '\003' [367] */
     40 	/* expect+7: warning: empty description in '\004' [367] */
     41 	snprintb(buf, sizeof(buf),
     42 	    "\020"
     43 	    "\001" "" ""
     44 	    "\002" "" ""
     45 	    "\003" "" ""
     46 	    "\004" "" "",
     47 	    u32);
     48 
     49 	// Single-letter descriptions are not empty.
     50 	snprintb(buf, sizeof(buf),
     51 	    "\020"
     52 	    "\001a"
     53 	    "\002b"
     54 	    "\003c"
     55 	    "\004d",
     56 	    u32);
     57 }
     58 
     59 void
     60 new_style(uint64_t u64)
     61 {
     62 	char buf[64];
     63 
     64 	/* expect+4: warning: empty description in 'b\000\0' [367] */
     65 	snprintb(buf, sizeof(buf),
     66 	    "\177\020"
     67 	    "b\000\0",
     68 	    u64);
     69 
     70 	/* expect+4: warning: empty description in 'f\000\010\0' [367] */
     71 	snprintb(buf, sizeof(buf),
     72 	    "\177\020"
     73 	    "f\000\010\0",
     74 	    u64);
     75 
     76 	// No warning, as 'F' does not take a description.
     77 	// If there were a description, it would simply be skipped.
     78 	snprintb(buf, sizeof(buf),
     79 	    "\177\020"
     80 	    "F\000\010\0",
     81 	    u64);
     82 
     83 	/* expect+4: warning: empty description in '=\000\0' [367] */
     84 	snprintb(buf, sizeof(buf),
     85 	    "\177\020"
     86 	    "=\000\0",
     87 	    u64);
     88 
     89 	/* expect+4: warning: empty description in ':\000\0' [367] */
     90 	snprintb(buf, sizeof(buf),
     91 	    "\177\020"
     92 	    ":\000\0",
     93 	    u64);
     94 
     95 	/* expect+4: warning: empty description in '*\0' [367] */
     96 	snprintb(buf, sizeof(buf),
     97 	    "\177\020"
     98 	    "*\0",
     99 	    u64);
    100 
    101 	// Single-letter descriptions are not empty.
    102 	snprintb(buf, sizeof(buf),
    103 	    "\177\020"
    104 	    "b\000b\0"
    105 	    "f\001\001f\0"
    106 	    "F\002\002F\0"
    107 		"=\000z\0"
    108 		":\001o\0"
    109 		"*d\0",
    110 	    /* expect+1: warning: conversion '=' does not mix with 'F' [386] */
    111 	    u64 >> 1);
    112 
    113 	/* expect+6: warning: empty description in 'b\001""""""\0' [367] */
    114 	/* expect+5: warning: empty description in 'b\003""""""\0' [367] */
    115 	snprintb(buf, sizeof(buf),
    116 	    "\177\020"
    117 	    "b\001" "" "" "\0"
    118 	    "b\003" "" "" "\0",
    119 	    u64);
    120 }
    121