From c774b68ffb026af9bbc0222c34158ff4eb72c5be Mon Sep 17 00:00:00 2001
From: Andy Fiddaman <illumos@fiddaman.net>
Date: Tue, 15 Oct 2024 15:31:19 +0000
Subject: 16768 kernel printf should know about %j and %z size
 specifiers

---
 gcc/config/sol2-c.cc                    | 9 +++++----
 gcc/testsuite/gcc.dg/format/cmn-err-1.c | 4 ++++
 2 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/gcc/config/sol2-c.cc b/gcc/config/sol2-c.cc
index c84c1369b891..9fa31b96ddc8 100644
--- a/gcc/config/sol2-c.cc
+++ b/gcc/config/sol2-c.cc
@@ -37,6 +37,8 @@ static const format_length_info cmn_err_length_specs[] =
 {
   { "h", FMT_LEN_h, STD_C89, "hh", FMT_LEN_hh, STD_C99, 0 },
   { "l", FMT_LEN_l, STD_C89, "ll", FMT_LEN_ll, STD_C89, 0 },
+  { "j", FMT_LEN_j, STD_C99, NO_FMT, 0 },
+  { "z", FMT_LEN_z, STD_C99, NO_FMT, 0 },
   { NO_FMT, NO_FMT, 0 }
 };
 
@@ -63,10 +65,9 @@ static const format_char_info bitfield_string_type =
 static const format_char_info cmn_err_char_table[] =
 {
   /*                     none     hh       h        l        ll       L        z        t        j        H       D       DD */
-  /* C89 conversion specifiers.  */
-  { "dD",  0, STD_C89, { T89_I,   T99_SC,  T89_S,   T89_L,   T9L_LL,  BADLEN,  BADLEN,  BADLEN,  BADLEN , BADLEN, BADLEN, BADLEN }, "-wp0", "",   NULL },
-  { "oOxX",0, STD_C89, { T89_UI,  T99_UC,  T89_US,  T89_UL,  T9L_ULL, BADLEN,  BADLEN,  BADLEN,  BADLEN , BADLEN, BADLEN, BADLEN }, "-wp0", "",   NULL },
-  { "u",   0, STD_C89, { T89_UI,  T99_UC,  T89_US,  T89_UL,  T9L_ULL, BADLEN,  BADLEN,  BADLEN,  BADLEN , BADLEN, BADLEN, BADLEN }, "-wp0", "",   NULL },
+  { "dD",  0, STD_C89, { T89_I,   T99_SC,  T89_S,   T89_L,   T9L_LL,  BADLEN,  T99_SST, BADLEN,  T99_IM , BADLEN, BADLEN, BADLEN }, "-wp0", "",   NULL },
+  { "oOxX",0, STD_C89, { T89_UI,  T99_UC,  T89_US,  T89_UL,  T9L_ULL, BADLEN,  T99_ST,  BADLEN,  T99_UIM, BADLEN, BADLEN, BADLEN }, "-wp0", "",   NULL },
+  { "u",   0, STD_C89, { T89_UI,  T99_UC,  T89_US,  T89_UL,  T9L_ULL, BADLEN,  T99_ST,  BADLEN,  T99_UIM, BADLEN, BADLEN, BADLEN }, "-wp0", "",   NULL },
   { "c",   0, STD_C89, { T89_C,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN , BADLEN, BADLEN, BADLEN }, "-w",   "",   NULL },
   { "p",   1, STD_C89, { T89_V,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN , BADLEN, BADLEN, BADLEN }, "-w",   "c",  NULL },
   { "s",   1, STD_C89, { T89_C,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN , BADLEN, BADLEN, BADLEN }, "-wp",  "cR", NULL },
diff --git a/gcc/testsuite/gcc.dg/format/cmn-err-1.c b/gcc/testsuite/gcc.dg/format/cmn-err-1.c
index f6833c1723ad..cbb4a1f927c3 100644
--- a/gcc/testsuite/gcc.dg/format/cmn-err-1.c
+++ b/gcc/testsuite/gcc.dg/format/cmn-err-1.c
@@ -19,6 +19,8 @@ int main()
   llong ll = 3;
   char hh = 4;
   short h = 5;
+  size_t z = 6;
+  uintmax_t j = 7;
 
   cmn_err_func (0, "%s", string);
   cmn_err_func (0, "%d %D %o %O %x %X %u", i, i, i, i, i, i, i);
@@ -28,6 +30,8 @@ int main()
   cmn_err_func (0, "%hd %hD %ho %hO %hx %hX %hu", h, h, h, h, h, h, h);
   cmn_err_func (0, "%hhd %hhD %hho %hhO %hhx %hhX %hhu",
 		hh, hh, hh, hh, hh, hh, hh);
+  cmn_err_func (0, "%jd %jD %jo %jO %jx %jX %ju", j, j, j, j, j, j, j);
+  cmn_err_func (0, "%zd %zD %zo %zO %zx %zX %zu", z, z, z, z, z, z, z);
   cmn_err_func (0, "%b %s", i, "\01Foo", string);
   cmn_err_func (0, "%p", string);
   cmn_err_func (0, "%16b", i, "\01Foo");