/*      $NetBSD: msg_367.c,v 1.3 2024/08/31 06:57:31 rillig Exp $       */
# 3 "msg_367.c"

// Test for message: empty description in '%.*s' [367]

/*
* Each bit or field or comparison value gets a description.  If such a
* description is empty, the generated output will contain empty angle
* brackets or multiple adjacent commas or commas adjacent to an angle
* bracket, such as '<,,,,>'.
*/

/* lint1-extra-flags: -X 351 */

typedef typeof(sizeof(0)) size_t;
typedef unsigned long long uint64_t;

int snprintb(char *, size_t, const char *, uint64_t);

void
old_style(unsigned u32)
{
       char buf[64];

       /* expect+10: warning: empty description in '\001' [367] */
       /* expect+9: warning: empty description in '\002' [367] */
       /* expect+8: warning: empty description in '\003' [367] */
       /* expect+7: warning: empty description in '\004' [367] */
       snprintb(buf, sizeof(buf),
           "\020"
           "\001"
           "\002"
           "\003"
           "\004",
           u32);

       /* expect+10: warning: empty description in '\001' [367] */
       /* expect+9: warning: empty description in '\002' [367] */
       /* expect+8: warning: empty description in '\003' [367] */
       /* expect+7: warning: empty description in '\004' [367] */
       snprintb(buf, sizeof(buf),
           "\020"
           "\001" "" ""
           "\002" "" ""
           "\003" "" ""
           "\004" "" "",
           u32);

       // Single-letter descriptions are not empty.
       snprintb(buf, sizeof(buf),
           "\020"
           "\001a"
           "\002b"
           "\003c"
           "\004d",
           u32);
}

void
new_style(uint64_t u64)
{
       char buf[64];

       /* expect+4: warning: empty description in 'b\000\0' [367] */
       snprintb(buf, sizeof(buf),
           "\177\020"
           "b\000\0",
           u64);

       /* expect+4: warning: empty description in 'f\000\010\0' [367] */
       snprintb(buf, sizeof(buf),
           "\177\020"
           "f\000\010\0",
           u64);

       // No warning, as 'F' does not take a description.
       // If there were a description, it would simply be skipped.
       snprintb(buf, sizeof(buf),
           "\177\020"
           "F\000\010\0",
           u64);

       /* expect+4: warning: empty description in '=\000\0' [367] */
       snprintb(buf, sizeof(buf),
           "\177\020"
           "=\000\0",
           u64);

       /* expect+4: warning: empty description in ':\000\0' [367] */
       snprintb(buf, sizeof(buf),
           "\177\020"
           ":\000\0",
           u64);

       /* expect+4: warning: empty description in '*\0' [367] */
       snprintb(buf, sizeof(buf),
           "\177\020"
           "*\0",
           u64);

       // Single-letter descriptions are not empty.
       snprintb(buf, sizeof(buf),
           "\177\020"
           "b\000b\0"
           "f\001\001f\0"
           "F\002\002F\0"
               "=\000z\0"
               ":\001o\0"
               "*d\0",
           u64 >> 1);

       /* expect+6: warning: empty description in 'b\001""""""\0' [367] */
       /* expect+5: warning: empty description in 'b\003""""""\0' [367] */
       snprintb(buf, sizeof(buf),
           "\177\020"
           "b\001" "" "" "\0"
           "b\003" "" "" "\0",
           u64);
}