diffutils-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] build: temp?-disable -Wanalyzer-use-of-uninitialized-value


From: Jim Meyering
Subject: [PATCH] build: temp?-disable -Wanalyzer-use-of-uninitialized-value
Date: Fri, 30 Dec 2022 13:36:49 -0800

FYI, I've just pushed this:

build: temp?-disable -Wanalyzer-use-of-uninitialized-value
* src/util.c (print_message_queue): This function triggers false
positive warnings from GCC12, so add pragmas to ignore that new warning
in this one function. Required when using either of these:
- gcc version 12.2.1 20221121
- gcc version 13.0.0 20221229 (experimental)

Here's the patch:

>From eb3085a076c94cc4b48233ce8fa9de60bd734467 Mon Sep 17 00:00:00 2001
From: Jim Meyering <meyering@fb.com>
Date: Sun, 11 Dec 2022 09:28:57 -0800
Subject: [PATCH] build: temp?-disable -Wanalyzer-use-of-uninitialized-value

* src/util.c (print_message_queue): This function triggers false
positive warnings from GCC12, so add pragmas to ignore that new warning
in this one function. Required when using either of these:
- gcc version 12.2.1 20221121
- gcc version 13.0.0 20221229 (experimental)
---
 src/util.c | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/src/util.c b/src/util.c
index bdc2bda..d2fd5ca 100644
--- a/src/util.c
+++ b/src/util.c
@@ -153,6 +153,13 @@ message (char const *format_msgid, ...)
   va_end (ap);
 }

+/* Suppress false positive from gcc version 13.0.0 20221208 (experimental) 
(GCC)
+ */
+_Pragma ("GCC diagnostic push")
+#if 12 <= __GNUC__
+_Pragma ("GCC diagnostic ignored \"-Wanalyzer-use-of-uninitialized-value\"")
+#endif
+
 /* Output all the messages that were saved up by calls to 'message'.  */

 void
@@ -178,7 +185,8 @@ print_message_queue (void)
       m = next;
     }
 }
-
+_Pragma ("GCC diagnostic pop")
+
 /* Signal handling, needed for restoring default colors.  */

 static void
-- 
2.39.0.132.g8a4e8f6a67

And here's the log with warnings/errors, for reference:

  CC       util.o
util.c: In function 'print_message_queue':
util.c:173:7: error: use of uninitialized value 'arg[1]' [CWE-457] 
[-Werror=analyzer-use-of-uninitialized-value]
  173 |       printf (_(m->msgid), arg[0], arg[1], arg[2], arg[3]);
      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  'output_1_line': events 1-5
    |
    | 1364 | output_1_line (char const *base, char const *limit, char const 
*flag_format,
    |      | ^~~~~~~~~~~~~
    |      | |
    |      | (1) entry to 'output_1_line'
    |......
    | 1368 |   if (!expand_tabs)
    |      |      ~
    |      |      |
    |      |      (2) following 'false' branch...
    | 1369 |     {
    | 1370 |       size_t left = limit - base;
    |      |       ~~~~~~
    |      |       |
    |      |       (3) ...to here
    | 1371 |       while (left)
    |      |              ~~~~
    |      |              |
    |      |              (4) following 'true' branch (when 'left != 0')...
    | 1372 |         {
    | 1373 |           size_t to_write = MIN (left, MAX_CHUNK);
    |      |           ~~~~~~
    |      |           |
    |      |           (5) ...to here
    |
  'output_1_line': event 6
    |
    |../lib/unlocked-io.h:94:27:
    |   94 | #  define fwrite(w,x,y,z) fwrite_unlocked (w,x,y,z)
    |      |                           ^~~~~~~~~~~~~~~
    |      |                           |
    |      |                           (6) following 'true' branch...
util.c:1374:28: note: in expansion of macro 'fwrite'
    | 1374 |           size_t written = fwrite (base, sizeof (char), to_write, 
outfile);
    |      |                            ^~~~~~
    |
  'output_1_line': event 7
    |
    |../lib/unlocked-io.h:94:27:
    |   94 | #  define fwrite(w,x,y,z) fwrite_unlocked (w,x,y,z)
    |      |                           ^~~~~~~~~~~~~~~
    |      |                           |
    |      |                           (7) ...to here
util.c:1374:28: note: in expansion of macro 'fwrite'
    | 1374 |           size_t written = fwrite (base, sizeof (char), to_write, 
outfile);
    |      |                            ^~~~~~
    |
  'output_1_line': event 8
    |
    |../lib/unlocked-io.h:94:27:
    |   94 | #  define fwrite(w,x,y,z) fwrite_unlocked (w,x,y,z)
    |      |                           ^~~~~~~~~~~~~~~
    |      |                           |
    |      |                           (8) following 'false' branch (when 
'__cnt == 0')...
util.c:1374:28: note: in expansion of macro 'fwrite'
    | 1374 |           size_t written = fwrite (base, sizeof (char), to_write, 
outfile);
    |      |                            ^~~~~~
    |
  'output_1_line': event 9
    |
    |../lib/unlocked-io.h:94:27:
    |   94 | #  define fwrite(w,x,y,z) fwrite_unlocked (w,x,y,z)
    |      |                           ^~~~~~~~~~~~~~~
    |      |                           |
    |      |                           (9) ...to here
util.c:1374:28: note: in expansion of macro 'fwrite'
    | 1374 |           size_t written = fwrite (base, sizeof (char), to_write, 
outfile);
    |      |                            ^~~~~~
    |
  'output_1_line': events 10-12
    |
    | 1375 |           if (written < to_write)
    |      |              ^
    |      |              |
    |      |              (10) following 'false' branch...
    | 1376 |             return;
    | 1377 |           base += written;
    |      |           ~~~~
    |      |           |
    |      |           (11) ...to here
    | 1378 |           left -= written;
    | 1379 |           process_signals ();
    |      |           ~~~~~~~~~~~~~~~~~~
    |      |           |
    |      |           (12) calling 'process_signals' from 'output_1_line'
    |
    +--> 'process_signals': events 13-16
           |
           |  260 | process_signals (void)
           |      | ^~~~~~~~~~~~~~~
           |      | |
           |      | (13) entry to 'process_signals'
           |  261 | {
           |  262 |   while (interrupt_signal | stop_signal_count)
           |      |          ~~~~~~~~~~~~~~~~
           |      |          |
           |      |          (14) following 'true' branch...
           |  263 |     {
           |  264 |       set_color_context (RESET_CONTEXT);
           |      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |       |
           |      |       (15) ...to here
           |      |       (16) calling 'set_color_context' from 
'process_signals'
           |
           +--> 'set_color_context': events 17-19
                  |
                  | 1449 | set_color_context (enum color_context color_context)
                  |      | ^~~~~~~~~~~~~~~~~
                  |      | |
                  |      | (17) entry to 'set_color_context'
                  | 1450 | {
                  | 1451 |   if (color_context != RESET_CONTEXT)
                  |      |      ~
                  |      |      |
                  |      |      (18) following 'false' branch (when 
'color_context == 3')...
                  | 1452 |     process_signals ();
                  | 1453 |   if (colors_enabled && last_context != 
color_context)
                  |      |   ~~
                  |      |   |
                  |      |   (19) ...to here
                  |
           <------+
           |
         'process_signals': events 20-21
           |
           |  264 |       set_color_context (RESET_CONTEXT);
           |      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |       |
           |      |       (20) returning to 'process_signals' from 
'set_color_context'
           |......
           |  268 |       xsigprocmask (SIG_BLOCK, &caught_signals, &oldset);
           |      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |       |
           |      |       (21) calling 'xsigprocmask' from 'process_signals'
           |
           +--> 'xsigprocmask': events 22-24
                  |
                  |  212 | xsigprocmask (int how, sigset_t const *restrict set, 
sigset_t *restrict oset)
                  |      | ^~~~~~~~~~~~
                  |      | |
                  |      | (22) entry to 'xsigprocmask'
                  |  213 | {
                  |  214 |   if (sigprocmask (how, set, oset) != 0)
                  |      |      ~
                  |      |      |
                  |      |      (23) following 'false' branch...
                  |  215 |     pfatal_with_name ("sigprocmask");
                  |  216 | }
                  |      | ~
                  |      | |
                  |      | (24) ...to here
                  |
           <------+
           |
         'process_signals': events 25-26
           |
           |  268 |       xsigprocmask (SIG_BLOCK, &caught_signals, &oldset);
           |      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |       |
           |      |       (25) returning to 'process_signals' from 
'xsigprocmask'
           |......
           |  290 |         pfatal_with_name ("raise");
           |      |         ~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |         |
           |      |         (26) calling 'pfatal_with_name' from 
'process_signals'
           |
           +--> 'pfatal_with_name': events 27-28
                  |
                  |   87 | pfatal_with_name (char const *name)
                  |      | ^~~~~~~~~~~~~~~~
                  |      | |
                  |      | (27) entry to 'pfatal_with_name'
                  |......
                  |   90 |   print_message_queue ();
                  |      |   ~~~~~~~~~~~~~~~~~~~~~~
                  |      |   |
                  |      |   (28) calling 'print_message_queue' from 
'pfatal_with_name'
                  |
                  +--> 'print_message_queue': events 29-37
                         |
                         |  159 | print_message_queue (void)
                         |      | ^~~~~~~~~~~~~~~~~~~
                         |      | |
                         |      | (29) entry to 'print_message_queue'
                         |  160 | {
                         |  161 |   for (struct msg *m = msg_chain; m; )
                         |      |                                   ~
                         |      |                                   |
                         |      |                                   (31) 
following 'true' branch (when 'm' is non-NULL)...
                         |......
                         |  164 |       char const *p = m->args;
                         |      |       ~~~~
                         |      |       |
                         |      |       (32) ...to here
                         |  165 |       char const *plim = p + m->argbytes;
                         |  166 |       char const *arg[4];
                         |      |                   ~~~
                         |      |                   |
                         |      |                   (30) region created on 
stack here
                         |  167 |       for (int i = 0; i < 4; i++)
                         |      |                       ~~~~~
                         |      |                         |
                         |      |                         (33) following 'true' 
branch (when 'i != 4')...
                         |      |                         (35) following 
'false' branch (when 'i == 4')...
                         |  168 |         {
                         |  169 |           arg[i] = p;
                         |      |           ~~~
                         |      |           |
                         |      |           (34) ...to here
                         |......
                         |  173 |       printf (_(m->msgid), arg[0], arg[1], 
arg[2], arg[3]);
                         |      |       
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                         |      |       |
                         |      |       (36) ...to here
                         |      |       (37) use of uninitialized value 
'arg[1]' here
                         |
util.c:173:7: error: use of uninitialized value 'arg[3]' [CWE-457] 
[-Werror=analyzer-use-of-uninitialized-value]
  173 |       printf (_(m->msgid), arg[0], arg[1], arg[2], arg[3]);
      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  'output_1_line': events 1-5
    |
    | 1364 | output_1_line (char const *base, char const *limit, char const 
*flag_format,
    |      | ^~~~~~~~~~~~~
    |      | |
    |      | (1) entry to 'output_1_line'
    |......
    | 1368 |   if (!expand_tabs)
    |      |      ~
    |      |      |
    |      |      (2) following 'false' branch...
    | 1369 |     {
    | 1370 |       size_t left = limit - base;
    |      |       ~~~~~~
    |      |       |
    |      |       (3) ...to here
    | 1371 |       while (left)
    |      |              ~~~~
    |      |              |
    |      |              (4) following 'true' branch (when 'left != 0')...
    | 1372 |         {
    | 1373 |           size_t to_write = MIN (left, MAX_CHUNK);
    |      |           ~~~~~~
    |      |           |
    |      |           (5) ...to here
    |
  'output_1_line': event 6
    |
    |../lib/unlocked-io.h:94:27:
    |   94 | #  define fwrite(w,x,y,z) fwrite_unlocked (w,x,y,z)
    |      |                           ^~~~~~~~~~~~~~~
    |      |                           |
    |      |                           (6) following 'true' branch...
util.c:1374:28: note: in expansion of macro 'fwrite'
    | 1374 |           size_t written = fwrite (base, sizeof (char), to_write, 
outfile);
    |      |                            ^~~~~~
    |
  'output_1_line': event 7
    |
    |../lib/unlocked-io.h:94:27:
    |   94 | #  define fwrite(w,x,y,z) fwrite_unlocked (w,x,y,z)
    |      |                           ^~~~~~~~~~~~~~~
    |      |                           |
    |      |                           (7) ...to here
util.c:1374:28: note: in expansion of macro 'fwrite'
    | 1374 |           size_t written = fwrite (base, sizeof (char), to_write, 
outfile);
    |      |                            ^~~~~~
    |
  'output_1_line': event 8
    |
    |../lib/unlocked-io.h:94:27:
    |   94 | #  define fwrite(w,x,y,z) fwrite_unlocked (w,x,y,z)
    |      |                           ^~~~~~~~~~~~~~~
    |      |                           |
    |      |                           (8) following 'false' branch (when 
'__cnt == 0')...
util.c:1374:28: note: in expansion of macro 'fwrite'
    | 1374 |           size_t written = fwrite (base, sizeof (char), to_write, 
outfile);
    |      |                            ^~~~~~
    |
  'output_1_line': event 9
    |
    |../lib/unlocked-io.h:94:27:
    |   94 | #  define fwrite(w,x,y,z) fwrite_unlocked (w,x,y,z)
    |      |                           ^~~~~~~~~~~~~~~
    |      |                           |
    |      |                           (9) ...to here
util.c:1374:28: note: in expansion of macro 'fwrite'
    | 1374 |           size_t written = fwrite (base, sizeof (char), to_write, 
outfile);
    |      |                            ^~~~~~
    |
  'output_1_line': events 10-12
    |
    | 1375 |           if (written < to_write)
    |      |              ^
    |      |              |
    |      |              (10) following 'false' branch...
    | 1376 |             return;
    | 1377 |           base += written;
    |      |           ~~~~
    |      |           |
    |      |           (11) ...to here
    | 1378 |           left -= written;
    | 1379 |           process_signals ();
    |      |           ~~~~~~~~~~~~~~~~~~
    |      |           |
    |      |           (12) calling 'process_signals' from 'output_1_line'
    |
    +--> 'process_signals': events 13-16
           |
           |  260 | process_signals (void)
           |      | ^~~~~~~~~~~~~~~
           |      | |
           |      | (13) entry to 'process_signals'
           |  261 | {
           |  262 |   while (interrupt_signal | stop_signal_count)
           |      |          ~~~~~~~~~~~~~~~~
           |      |          |
           |      |          (14) following 'true' branch...
           |  263 |     {
           |  264 |       set_color_context (RESET_CONTEXT);
           |      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |       |
           |      |       (15) ...to here
           |      |       (16) calling 'set_color_context' from 
'process_signals'
           |
           +--> 'set_color_context': events 17-19
                  |
                  | 1449 | set_color_context (enum color_context color_context)
                  |      | ^~~~~~~~~~~~~~~~~
                  |      | |
                  |      | (17) entry to 'set_color_context'
                  | 1450 | {
                  | 1451 |   if (color_context != RESET_CONTEXT)
                  |      |      ~
                  |      |      |
                  |      |      (18) following 'false' branch (when 
'color_context == 3')...
                  | 1452 |     process_signals ();
                  | 1453 |   if (colors_enabled && last_context != 
color_context)
                  |      |   ~~
                  |      |   |
                  |      |   (19) ...to here
                  |
           <------+
           |
         'process_signals': events 20-21
           |
           |  264 |       set_color_context (RESET_CONTEXT);
           |      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |       |
           |      |       (20) returning to 'process_signals' from 
'set_color_context'
           |......
           |  268 |       xsigprocmask (SIG_BLOCK, &caught_signals, &oldset);
           |      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |       |
           |      |       (21) calling 'xsigprocmask' from 'process_signals'
           |
           +--> 'xsigprocmask': events 22-24
                  |
                  |  212 | xsigprocmask (int how, sigset_t const *restrict set, 
sigset_t *restrict oset)
                  |      | ^~~~~~~~~~~~
                  |      | |
                  |      | (22) entry to 'xsigprocmask'
                  |  213 | {
                  |  214 |   if (sigprocmask (how, set, oset) != 0)
                  |      |      ~
                  |      |      |
                  |      |      (23) following 'false' branch...
                  |  215 |     pfatal_with_name ("sigprocmask");
                  |  216 | }
                  |      | ~
                  |      | |
                  |      | (24) ...to here
                  |
           <------+
           |
         'process_signals': events 25-26
           |
           |  268 |       xsigprocmask (SIG_BLOCK, &caught_signals, &oldset);
           |      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |       |
           |      |       (25) returning to 'process_signals' from 
'xsigprocmask'
           |......
           |  290 |         pfatal_with_name ("raise");
           |      |         ~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |         |
           |      |         (26) calling 'pfatal_with_name' from 
'process_signals'
           |
           +--> 'pfatal_with_name': events 27-28
                  |
                  |   87 | pfatal_with_name (char const *name)
                  |      | ^~~~~~~~~~~~~~~~
                  |      | |
                  |      | (27) entry to 'pfatal_with_name'
                  |......
                  |   90 |   print_message_queue ();
                  |      |   ~~~~~~~~~~~~~~~~~~~~~~
                  |      |   |
                  |      |   (28) calling 'print_message_queue' from 
'pfatal_with_name'
                  |
                  +--> 'print_message_queue': events 29-37
                         |
                         |  159 | print_message_queue (void)
                         |      | ^~~~~~~~~~~~~~~~~~~
                         |      | |
                         |      | (29) entry to 'print_message_queue'
                         |  160 | {
                         |  161 |   for (struct msg *m = msg_chain; m; )
                         |      |                                   ~
                         |      |                                   |
                         |      |                                   (31) 
following 'true' branch (when 'm' is non-NULL)...
                         |......
                         |  164 |       char const *p = m->args;
                         |      |       ~~~~
                         |      |       |
                         |      |       (32) ...to here
                         |  165 |       char const *plim = p + m->argbytes;
                         |  166 |       char const *arg[4];
                         |      |                   ~~~
                         |      |                   |
                         |      |                   (30) region created on 
stack here
                         |  167 |       for (int i = 0; i < 4; i++)
                         |      |                       ~~~~~
                         |      |                         |
                         |      |                         (33) following 'true' 
branch (when 'i != 4')...
                         |      |                         (35) following 
'false' branch (when 'i == 4')...
                         |  168 |         {
                         |  169 |           arg[i] = p;
                         |      |           ~~~
                         |      |           |
                         |      |           (34) ...to here
                         |......
                         |  173 |       printf (_(m->msgid), arg[0], arg[1], 
arg[2], arg[3]);
                         |      |       
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                         |      |       |
                         |      |       (36) ...to here
                         |      |       (37) use of uninitialized value 
'arg[3]' here
                         |
util.c:173:7: error: use of uninitialized value 'arg[2]' [CWE-457] 
[-Werror=analyzer-use-of-uninitialized-value]
  173 |       printf (_(m->msgid), arg[0], arg[1], arg[2], arg[3]);
      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  'output_1_line': events 1-5
    |
    | 1364 | output_1_line (char const *base, char const *limit, char const 
*flag_format,
    |      | ^~~~~~~~~~~~~
    |      | |
    |      | (1) entry to 'output_1_line'
    |......
    | 1368 |   if (!expand_tabs)
    |      |      ~
    |      |      |
    |      |      (2) following 'false' branch...
    | 1369 |     {
    | 1370 |       size_t left = limit - base;
    |      |       ~~~~~~
    |      |       |
    |      |       (3) ...to here
    | 1371 |       while (left)
    |      |              ~~~~
    |      |              |
    |      |              (4) following 'true' branch (when 'left != 0')...
    | 1372 |         {
    | 1373 |           size_t to_write = MIN (left, MAX_CHUNK);
    |      |           ~~~~~~
    |      |           |
    |      |           (5) ...to here
    |
  'output_1_line': event 6
    |
    |../lib/unlocked-io.h:94:27:
    |   94 | #  define fwrite(w,x,y,z) fwrite_unlocked (w,x,y,z)
    |      |                           ^~~~~~~~~~~~~~~
    |      |                           |
    |      |                           (6) following 'true' branch...
util.c:1374:28: note: in expansion of macro 'fwrite'
    | 1374 |           size_t written = fwrite (base, sizeof (char), to_write, 
outfile);
    |      |                            ^~~~~~
    |
  'output_1_line': event 7
    |
    |../lib/unlocked-io.h:94:27:
    |   94 | #  define fwrite(w,x,y,z) fwrite_unlocked (w,x,y,z)
    |      |                           ^~~~~~~~~~~~~~~
    |      |                           |
    |      |                           (7) ...to here
util.c:1374:28: note: in expansion of macro 'fwrite'
    | 1374 |           size_t written = fwrite (base, sizeof (char), to_write, 
outfile);
    |      |                            ^~~~~~
    |
  'output_1_line': event 8
    |
    |../lib/unlocked-io.h:94:27:
    |   94 | #  define fwrite(w,x,y,z) fwrite_unlocked (w,x,y,z)
    |      |                           ^~~~~~~~~~~~~~~
    |      |                           |
    |      |                           (8) following 'false' branch (when 
'__cnt == 0')...
util.c:1374:28: note: in expansion of macro 'fwrite'
    | 1374 |           size_t written = fwrite (base, sizeof (char), to_write, 
outfile);
    |      |                            ^~~~~~
    |
  'output_1_line': event 9
    |
    |../lib/unlocked-io.h:94:27:
    |   94 | #  define fwrite(w,x,y,z) fwrite_unlocked (w,x,y,z)
    |      |                           ^~~~~~~~~~~~~~~
    |      |                           |
    |      |                           (9) ...to here
util.c:1374:28: note: in expansion of macro 'fwrite'
    | 1374 |           size_t written = fwrite (base, sizeof (char), to_write, 
outfile);
    |      |                            ^~~~~~
    |
  'output_1_line': events 10-12
    |
    | 1375 |           if (written < to_write)
    |      |              ^
    |      |              |
    |      |              (10) following 'false' branch...
    | 1376 |             return;
    | 1377 |           base += written;
    |      |           ~~~~
    |      |           |
    |      |           (11) ...to here
    | 1378 |           left -= written;
    | 1379 |           process_signals ();
    |      |           ~~~~~~~~~~~~~~~~~~
    |      |           |
    |      |           (12) calling 'process_signals' from 'output_1_line'
    |
    +--> 'process_signals': events 13-16
           |
           |  260 | process_signals (void)
           |      | ^~~~~~~~~~~~~~~
           |      | |
           |      | (13) entry to 'process_signals'
           |  261 | {
           |  262 |   while (interrupt_signal | stop_signal_count)
           |      |          ~~~~~~~~~~~~~~~~
           |      |          |
           |      |          (14) following 'true' branch...
           |  263 |     {
           |  264 |       set_color_context (RESET_CONTEXT);
           |      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |       |
           |      |       (15) ...to here
           |      |       (16) calling 'set_color_context' from 
'process_signals'
           |
           +--> 'set_color_context': events 17-19
                  |
                  | 1449 | set_color_context (enum color_context color_context)
                  |      | ^~~~~~~~~~~~~~~~~
                  |      | |
                  |      | (17) entry to 'set_color_context'
                  | 1450 | {
                  | 1451 |   if (color_context != RESET_CONTEXT)
                  |      |      ~
                  |      |      |
                  |      |      (18) following 'false' branch (when 
'color_context == 3')...
                  | 1452 |     process_signals ();
                  | 1453 |   if (colors_enabled && last_context != 
color_context)
                  |      |   ~~
                  |      |   |
                  |      |   (19) ...to here
                  |
           <------+
           |
         'process_signals': events 20-21
           |
           |  264 |       set_color_context (RESET_CONTEXT);
           |      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |       |
           |      |       (20) returning to 'process_signals' from 
'set_color_context'
           |......
           |  268 |       xsigprocmask (SIG_BLOCK, &caught_signals, &oldset);
           |      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |       |
           |      |       (21) calling 'xsigprocmask' from 'process_signals'
           |
           +--> 'xsigprocmask': events 22-24
                  |
                  |  212 | xsigprocmask (int how, sigset_t const *restrict set, 
sigset_t *restrict oset)
                  |      | ^~~~~~~~~~~~
                  |      | |
                  |      | (22) entry to 'xsigprocmask'
                  |  213 | {
                  |  214 |   if (sigprocmask (how, set, oset) != 0)
                  |      |      ~
                  |      |      |
                  |      |      (23) following 'false' branch...
                  |  215 |     pfatal_with_name ("sigprocmask");
                  |  216 | }
                  |      | ~
                  |      | |
                  |      | (24) ...to here
                  |
           <------+
           |
         'process_signals': events 25-26
           |
           |  268 |       xsigprocmask (SIG_BLOCK, &caught_signals, &oldset);
           |      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |       |
           |      |       (25) returning to 'process_signals' from 
'xsigprocmask'
           |......
           |  290 |         pfatal_with_name ("raise");
           |      |         ~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |         |
           |      |         (26) calling 'pfatal_with_name' from 
'process_signals'
           |
           +--> 'pfatal_with_name': events 27-28
                  |
                  |   87 | pfatal_with_name (char const *name)
                  |      | ^~~~~~~~~~~~~~~~
                  |      | |
                  |      | (27) entry to 'pfatal_with_name'
                  |......
                  |   90 |   print_message_queue ();
                  |      |   ~~~~~~~~~~~~~~~~~~~~~~
                  |      |   |
                  |      |   (28) calling 'print_message_queue' from 
'pfatal_with_name'
                  |
                  +--> 'print_message_queue': events 29-37
                         |
                         |  159 | print_message_queue (void)
                         |      | ^~~~~~~~~~~~~~~~~~~
                         |      | |
                         |      | (29) entry to 'print_message_queue'
                         |  160 | {
                         |  161 |   for (struct msg *m = msg_chain; m; )
                         |      |                                   ~
                         |      |                                   |
                         |      |                                   (31) 
following 'true' branch (when 'm' is non-NULL)...
                         |......
                         |  164 |       char const *p = m->args;
                         |      |       ~~~~
                         |      |       |
                         |      |       (32) ...to here
                         |  165 |       char const *plim = p + m->argbytes;
                         |  166 |       char const *arg[4];
                         |      |                   ~~~
                         |      |                   |
                         |      |                   (30) region created on 
stack here
                         |  167 |       for (int i = 0; i < 4; i++)
                         |      |                       ~~~~~
                         |      |                         |
                         |      |                         (33) following 'true' 
branch (when 'i != 4')...
                         |      |                         (35) following 
'false' branch (when 'i == 4')...
                         |  168 |         {
                         |  169 |           arg[i] = p;
                         |      |           ~~~
                         |      |           |
                         |      |           (34) ...to here
                         |......
                         |  173 |       printf (_(m->msgid), arg[0], arg[1], 
arg[2], arg[3]);
                         |      |       
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                         |      |       |
                         |      |       (36) ...to here
                         |      |       (37) use of uninitialized value 
'arg[2]' here
                         |
util.c:173:7: error: use of uninitialized value 'arg[2]' [CWE-457] 
[-Werror=analyzer-use-of-uninitialized-value]
  173 |       printf (_(m->msgid), arg[0], arg[1], arg[2], arg[3]);
      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  'output_1_line': events 1-5
    |
    | 1364 | output_1_line (char const *base, char const *limit, char const 
*flag_format,
    |      | ^~~~~~~~~~~~~
    |      | |
    |      | (1) entry to 'output_1_line'
    |......
    | 1368 |   if (!expand_tabs)
    |      |      ~
    |      |      |
    |      |      (2) following 'false' branch...
    | 1369 |     {
    | 1370 |       size_t left = limit - base;
    |      |       ~~~~~~
    |      |       |
    |      |       (3) ...to here
    | 1371 |       while (left)
    |      |              ~~~~
    |      |              |
    |      |              (4) following 'true' branch (when 'left != 0')...
    | 1372 |         {
    | 1373 |           size_t to_write = MIN (left, MAX_CHUNK);
    |      |           ~~~~~~
    |      |           |
    |      |           (5) ...to here
    |
  'output_1_line': event 6
    |
    |../lib/unlocked-io.h:94:27:
    |   94 | #  define fwrite(w,x,y,z) fwrite_unlocked (w,x,y,z)
    |      |                           ^~~~~~~~~~~~~~~
    |      |                           |
    |      |                           (6) following 'true' branch...
util.c:1374:28: note: in expansion of macro 'fwrite'
    | 1374 |           size_t written = fwrite (base, sizeof (char), to_write, 
outfile);
    |      |                            ^~~~~~
    |
  'output_1_line': event 7
    |
    |../lib/unlocked-io.h:94:27:
    |   94 | #  define fwrite(w,x,y,z) fwrite_unlocked (w,x,y,z)
    |      |                           ^~~~~~~~~~~~~~~
    |      |                           |
    |      |                           (7) ...to here
util.c:1374:28: note: in expansion of macro 'fwrite'
    | 1374 |           size_t written = fwrite (base, sizeof (char), to_write, 
outfile);
    |      |                            ^~~~~~
    |
  'output_1_line': event 8
    |
    |../lib/unlocked-io.h:94:27:
    |   94 | #  define fwrite(w,x,y,z) fwrite_unlocked (w,x,y,z)
    |      |                           ^~~~~~~~~~~~~~~
    |      |                           |
    |      |                           (8) following 'false' branch (when 
'__cnt == 0')...
util.c:1374:28: note: in expansion of macro 'fwrite'
    | 1374 |           size_t written = fwrite (base, sizeof (char), to_write, 
outfile);
    |      |                            ^~~~~~
    |
  'output_1_line': event 9
    |
    |../lib/unlocked-io.h:94:27:
    |   94 | #  define fwrite(w,x,y,z) fwrite_unlocked (w,x,y,z)
    |      |                           ^~~~~~~~~~~~~~~
    |      |                           |
    |      |                           (9) ...to here
util.c:1374:28: note: in expansion of macro 'fwrite'
    | 1374 |           size_t written = fwrite (base, sizeof (char), to_write, 
outfile);
    |      |                            ^~~~~~
    |
  'output_1_line': events 10-12
    |
    | 1375 |           if (written < to_write)
    |      |              ^
    |      |              |
    |      |              (10) following 'false' branch...
    | 1376 |             return;
    | 1377 |           base += written;
    |      |           ~~~~
    |      |           |
    |      |           (11) ...to here
    | 1378 |           left -= written;
    | 1379 |           process_signals ();
    |      |           ~~~~~~~~~~~~~~~~~~
    |      |           |
    |      |           (12) calling 'process_signals' from 'output_1_line'
    |
    +--> 'process_signals': events 13-16
           |
           |  260 | process_signals (void)
           |      | ^~~~~~~~~~~~~~~
           |      | |
           |      | (13) entry to 'process_signals'
           |  261 | {
           |  262 |   while (interrupt_signal | stop_signal_count)
           |      |          ~~~~~~~~~~~~~~~~
           |      |          |
           |      |          (14) following 'true' branch...
           |  263 |     {
           |  264 |       set_color_context (RESET_CONTEXT);
           |      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |       |
           |      |       (15) ...to here
           |      |       (16) calling 'set_color_context' from 
'process_signals'
           |
           +--> 'set_color_context': events 17-19
                  |
                  | 1449 | set_color_context (enum color_context color_context)
                  |      | ^~~~~~~~~~~~~~~~~
                  |      | |
                  |      | (17) entry to 'set_color_context'
                  | 1450 | {
                  | 1451 |   if (color_context != RESET_CONTEXT)
                  |      |      ~
                  |      |      |
                  |      |      (18) following 'false' branch (when 
'color_context == 3')...
                  | 1452 |     process_signals ();
                  | 1453 |   if (colors_enabled && last_context != 
color_context)
                  |      |   ~~
                  |      |   |
                  |      |   (19) ...to here
                  |
           <------+
           |
         'process_signals': events 20-21
           |
           |  264 |       set_color_context (RESET_CONTEXT);
           |      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |       |
           |      |       (20) returning to 'process_signals' from 
'set_color_context'
           |......
           |  268 |       xsigprocmask (SIG_BLOCK, &caught_signals, &oldset);
           |      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |       |
           |      |       (21) calling 'xsigprocmask' from 'process_signals'
           |
           +--> 'xsigprocmask': events 22-24
                  |
                  |  212 | xsigprocmask (int how, sigset_t const *restrict set, 
sigset_t *restrict oset)
                  |      | ^~~~~~~~~~~~
                  |      | |
                  |      | (22) entry to 'xsigprocmask'
                  |  213 | {
                  |  214 |   if (sigprocmask (how, set, oset) != 0)
                  |      |      ~
                  |      |      |
                  |      |      (23) following 'false' branch...
                  |  215 |     pfatal_with_name ("sigprocmask");
                  |  216 | }
                  |      | ~
                  |      | |
                  |      | (24) ...to here
                  |
           <------+
           |
         'process_signals': events 25-28
           |
           |  268 |       xsigprocmask (SIG_BLOCK, &caught_signals, &oldset);
           |      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |       |
           |      |       (25) returning to 'process_signals' from 
'xsigprocmask'
           |......
           |  289 |       if (raise (sig) != 0)
           |      |          ~
           |      |          |
           |      |          (26) following 'false' branch...
           |  290 |         pfatal_with_name ("raise");
           |  291 |       xsigprocmask (SIG_SETMASK, &oldset, NULL);
           |      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |       |
           |      |       (27) ...to here
           |      |       (28) calling 'xsigprocmask' from 'process_signals'
           |
           +--> 'xsigprocmask': event 29
                  |
                  |  212 | xsigprocmask (int how, sigset_t const *restrict set, 
sigset_t *restrict oset)
                  |      | ^~~~~~~~~~~~
                  |      | |
                  |      | (29) entry to 'xsigprocmask'
                  |
                'xsigprocmask': event 30
                  |
                  |cc1:
                  | (30): calling 'xsigprocmask.part.0' from 'xsigprocmask'
                  |
                  +--> 'xsigprocmask.part.0': events 31-32
                         |
                         |  212 | xsigprocmask (int how, sigset_t const 
*restrict set, sigset_t *restrict oset)
                         |      | ^~~~~~~~~~~~
                         |      | |
                         |      | (31) entry to 'xsigprocmask.part.0'
                         |......
                         |  215 |     pfatal_with_name ("sigprocmask");
                         |      |     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                         |      |     |
                         |      |     (32) calling 'pfatal_with_name' from 
'xsigprocmask.part.0'
                         |
                         +--> 'pfatal_with_name': events 33-34
                                |
                                |   87 | pfatal_with_name (char const *name)
                                |      | ^~~~~~~~~~~~~~~~
                                |      | |
                                |      | (33) entry to 'pfatal_with_name'
                                |......
                                |   90 |   print_message_queue ();
                                |      |   ~~~~~~~~~~~~~~~~~~~~~~
                                |      |   |
                                |      |   (34) calling 'print_message_queue' 
from 'pfatal_with_name'
                                |
                                +--> 'print_message_queue': events 35-43
                                       |
                                       |  159 | print_message_queue (void)
                                       |      | ^~~~~~~~~~~~~~~~~~~
                                       |      | |
                                       |      | (35) entry to 
'print_message_queue'
                                       |  160 | {
                                       |  161 |   for (struct msg *m = 
msg_chain; m; )
                                       |      |                                 
  ~
                                       |      |                                 
  |
                                       |      |                                 
  (37) following 'true' branch (when 'm' is non-NULL)...
                                       |......
                                       |  164 |       char const *p = m->args;
                                       |      |       ~~~~
                                       |      |       |
                                       |      |       (38) ...to here
                                       |  165 |       char const *plim = p + 
m->argbytes;
                                       |  166 |       char const *arg[4];
                                       |      |                   ~~~
                                       |      |                   |
                                       |      |                   (36) region 
created on stack here
                                       |  167 |       for (int i = 0; i < 4; 
i++)
                                       |      |                       ~~~~~
                                       |      |                         |
                                       |      |                         (39) 
following 'true' branch (when 'i != 4')...
                                       |      |                         (41) 
following 'false' branch (when 'i == 4')...
                                       |  168 |         {
                                       |  169 |           arg[i] = p;
                                       |      |           ~~~
                                       |      |           |
                                       |      |           (40) ...to here
                                       |......
                                       |  173 |       printf (_(m->msgid), 
arg[0], arg[1], arg[2], arg[3]);
                                       |      |       
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                       |      |       |
                                       |      |       (42) ...to here
                                       |      |       (43) use of uninitialized 
value 'arg[2]' here
                                       |
util.c:173:7: error: use of uninitialized value 'arg[1]' [CWE-457] 
[-Werror=analyzer-use-of-uninitialized-value]
  173 |       printf (_(m->msgid), arg[0], arg[1], arg[2], arg[3]);
      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  'output_1_line': events 1-5
    |
    | 1364 | output_1_line (char const *base, char const *limit, char const 
*flag_format,
    |      | ^~~~~~~~~~~~~
    |      | |
    |      | (1) entry to 'output_1_line'
    |......
    | 1368 |   if (!expand_tabs)
    |      |      ~
    |      |      |
    |      |      (2) following 'false' branch...
    | 1369 |     {
    | 1370 |       size_t left = limit - base;
    |      |       ~~~~~~
    |      |       |
    |      |       (3) ...to here
    | 1371 |       while (left)
    |      |              ~~~~
    |      |              |
    |      |              (4) following 'true' branch (when 'left != 0')...
    | 1372 |         {
    | 1373 |           size_t to_write = MIN (left, MAX_CHUNK);
    |      |           ~~~~~~
    |      |           |
    |      |           (5) ...to here
    |
  'output_1_line': event 6
    |
    |../lib/unlocked-io.h:94:27:
    |   94 | #  define fwrite(w,x,y,z) fwrite_unlocked (w,x,y,z)
    |      |                           ^~~~~~~~~~~~~~~
    |      |                           |
    |      |                           (6) following 'true' branch...
util.c:1374:28: note: in expansion of macro 'fwrite'
    | 1374 |           size_t written = fwrite (base, sizeof (char), to_write, 
outfile);
    |      |                            ^~~~~~
    |
  'output_1_line': event 7
    |
    |../lib/unlocked-io.h:94:27:
    |   94 | #  define fwrite(w,x,y,z) fwrite_unlocked (w,x,y,z)
    |      |                           ^~~~~~~~~~~~~~~
    |      |                           |
    |      |                           (7) ...to here
util.c:1374:28: note: in expansion of macro 'fwrite'
    | 1374 |           size_t written = fwrite (base, sizeof (char), to_write, 
outfile);
    |      |                            ^~~~~~
    |
  'output_1_line': event 8
    |
    |../lib/unlocked-io.h:94:27:
    |   94 | #  define fwrite(w,x,y,z) fwrite_unlocked (w,x,y,z)
    |      |                           ^~~~~~~~~~~~~~~
    |      |                           |
    |      |                           (8) following 'false' branch (when 
'__cnt == 0')...
util.c:1374:28: note: in expansion of macro 'fwrite'
    | 1374 |           size_t written = fwrite (base, sizeof (char), to_write, 
outfile);
    |      |                            ^~~~~~
    |
  'output_1_line': event 9
    |
    |../lib/unlocked-io.h:94:27:
    |   94 | #  define fwrite(w,x,y,z) fwrite_unlocked (w,x,y,z)
    |      |                           ^~~~~~~~~~~~~~~
    |      |                           |
    |      |                           (9) ...to here
util.c:1374:28: note: in expansion of macro 'fwrite'
    | 1374 |           size_t written = fwrite (base, sizeof (char), to_write, 
outfile);
    |      |                            ^~~~~~
    |
  'output_1_line': events 10-12
    |
    | 1375 |           if (written < to_write)
    |      |              ^
    |      |              |
    |      |              (10) following 'false' branch...
    | 1376 |             return;
    | 1377 |           base += written;
    |      |           ~~~~
    |      |           |
    |      |           (11) ...to here
    | 1378 |           left -= written;
    | 1379 |           process_signals ();
    |      |           ~~~~~~~~~~~~~~~~~~
    |      |           |
    |      |           (12) calling 'process_signals' from 'output_1_line'
    |
    +--> 'process_signals': events 13-16
           |
           |  260 | process_signals (void)
           |      | ^~~~~~~~~~~~~~~
           |      | |
           |      | (13) entry to 'process_signals'
           |  261 | {
           |  262 |   while (interrupt_signal | stop_signal_count)
           |      |          ~~~~~~~~~~~~~~~~
           |      |          |
           |      |          (14) following 'true' branch...
           |  263 |     {
           |  264 |       set_color_context (RESET_CONTEXT);
           |      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |       |
           |      |       (15) ...to here
           |      |       (16) calling 'set_color_context' from 
'process_signals'
           |
           +--> 'set_color_context': events 17-19
                  |
                  | 1449 | set_color_context (enum color_context color_context)
                  |      | ^~~~~~~~~~~~~~~~~
                  |      | |
                  |      | (17) entry to 'set_color_context'
                  | 1450 | {
                  | 1451 |   if (color_context != RESET_CONTEXT)
                  |      |      ~
                  |      |      |
                  |      |      (18) following 'false' branch (when 
'color_context == 3')...
                  | 1452 |     process_signals ();
                  | 1453 |   if (colors_enabled && last_context != 
color_context)
                  |      |   ~~
                  |      |   |
                  |      |   (19) ...to here
                  |
           <------+
           |
         'process_signals': events 20-21
           |
           |  264 |       set_color_context (RESET_CONTEXT);
           |      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |       |
           |      |       (20) returning to 'process_signals' from 
'set_color_context'
           |......
           |  268 |       xsigprocmask (SIG_BLOCK, &caught_signals, &oldset);
           |      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |       |
           |      |       (21) calling 'xsigprocmask' from 'process_signals'
           |
           +--> 'xsigprocmask': events 22-24
                  |
                  |  212 | xsigprocmask (int how, sigset_t const *restrict set, 
sigset_t *restrict oset)
                  |      | ^~~~~~~~~~~~
                  |      | |
                  |      | (22) entry to 'xsigprocmask'
                  |  213 | {
                  |  214 |   if (sigprocmask (how, set, oset) != 0)
                  |      |      ~
                  |      |      |
                  |      |      (23) following 'false' branch...
                  |  215 |     pfatal_with_name ("sigprocmask");
                  |  216 | }
                  |      | ~
                  |      | |
                  |      | (24) ...to here
                  |
           <------+
           |
         'process_signals': events 25-28
           |
           |  268 |       xsigprocmask (SIG_BLOCK, &caught_signals, &oldset);
           |      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |       |
           |      |       (25) returning to 'process_signals' from 
'xsigprocmask'
           |......
           |  289 |       if (raise (sig) != 0)
           |      |          ~
           |      |          |
           |      |          (26) following 'false' branch...
           |  290 |         pfatal_with_name ("raise");
           |  291 |       xsigprocmask (SIG_SETMASK, &oldset, NULL);
           |      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |       |
           |      |       (27) ...to here
           |      |       (28) calling 'xsigprocmask' from 'process_signals'
           |
           +--> 'xsigprocmask': event 29
                  |
                  |  212 | xsigprocmask (int how, sigset_t const *restrict set, 
sigset_t *restrict oset)
                  |      | ^~~~~~~~~~~~
                  |      | |
                  |      | (29) entry to 'xsigprocmask'
                  |
                'xsigprocmask': event 30
                  |
                  |cc1:
                  | (30): calling 'xsigprocmask.part.0' from 'xsigprocmask'
                  |
                  +--> 'xsigprocmask.part.0': events 31-32
                         |
                         |  212 | xsigprocmask (int how, sigset_t const 
*restrict set, sigset_t *restrict oset)
                         |      | ^~~~~~~~~~~~
                         |      | |
                         |      | (31) entry to 'xsigprocmask.part.0'
                         |......
                         |  215 |     pfatal_with_name ("sigprocmask");
                         |      |     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                         |      |     |
                         |      |     (32) calling 'pfatal_with_name' from 
'xsigprocmask.part.0'
                         |
                         +--> 'pfatal_with_name': events 33-34
                                |
                                |   87 | pfatal_with_name (char const *name)
                                |      | ^~~~~~~~~~~~~~~~
                                |      | |
                                |      | (33) entry to 'pfatal_with_name'
                                |......
                                |   90 |   print_message_queue ();
                                |      |   ~~~~~~~~~~~~~~~~~~~~~~
                                |      |   |
                                |      |   (34) calling 'print_message_queue' 
from 'pfatal_with_name'
                                |
                                +--> 'print_message_queue': events 35-43
                                       |
                                       |  159 | print_message_queue (void)
                                       |      | ^~~~~~~~~~~~~~~~~~~
                                       |      | |
                                       |      | (35) entry to 
'print_message_queue'
                                       |  160 | {
                                       |  161 |   for (struct msg *m = 
msg_chain; m; )
                                       |      |                                 
  ~
                                       |      |                                 
  |
                                       |      |                                 
  (37) following 'true' branch (when 'm' is non-NULL)...
                                       |......
                                       |  164 |       char const *p = m->args;
                                       |      |       ~~~~
                                       |      |       |
                                       |      |       (38) ...to here
                                       |  165 |       char const *plim = p + 
m->argbytes;
                                       |  166 |       char const *arg[4];
                                       |      |                   ~~~
                                       |      |                   |
                                       |      |                   (36) region 
created on stack here
                                       |  167 |       for (int i = 0; i < 4; 
i++)
                                       |      |                       ~~~~~
                                       |      |                         |
                                       |      |                         (39) 
following 'true' branch (when 'i != 4')...
                                       |      |                         (41) 
following 'false' branch (when 'i == 4')...
                                       |  168 |         {
                                       |  169 |           arg[i] = p;
                                       |      |           ~~~
                                       |      |           |
                                       |      |           (40) ...to here
                                       |......
                                       |  173 |       printf (_(m->msgid), 
arg[0], arg[1], arg[2], arg[3]);
                                       |      |       
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                       |      |       |
                                       |      |       (42) ...to here
                                       |      |       (43) use of uninitialized 
value 'arg[1]' here
                                       |
util.c:173:7: error: use of uninitialized value 'arg[3]' [CWE-457] 
[-Werror=analyzer-use-of-uninitialized-value]
  173 |       printf (_(m->msgid), arg[0], arg[1], arg[2], arg[3]);
      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  'output_1_line': events 1-5
    |
    | 1364 | output_1_line (char const *base, char const *limit, char const 
*flag_format,
    |      | ^~~~~~~~~~~~~
    |      | |
    |      | (1) entry to 'output_1_line'
    |......
    | 1368 |   if (!expand_tabs)
    |      |      ~
    |      |      |
    |      |      (2) following 'false' branch...
    | 1369 |     {
    | 1370 |       size_t left = limit - base;
    |      |       ~~~~~~
    |      |       |
    |      |       (3) ...to here
    | 1371 |       while (left)
    |      |              ~~~~
    |      |              |
    |      |              (4) following 'true' branch (when 'left != 0')...
    | 1372 |         {
    | 1373 |           size_t to_write = MIN (left, MAX_CHUNK);
    |      |           ~~~~~~
    |      |           |
    |      |           (5) ...to here
    |
  'output_1_line': event 6
    |
    |../lib/unlocked-io.h:94:27:
    |   94 | #  define fwrite(w,x,y,z) fwrite_unlocked (w,x,y,z)
    |      |                           ^~~~~~~~~~~~~~~
    |      |                           |
    |      |                           (6) following 'true' branch...
util.c:1374:28: note: in expansion of macro 'fwrite'
    | 1374 |           size_t written = fwrite (base, sizeof (char), to_write, 
outfile);
    |      |                            ^~~~~~
    |
  'output_1_line': event 7
    |
    |../lib/unlocked-io.h:94:27:
    |   94 | #  define fwrite(w,x,y,z) fwrite_unlocked (w,x,y,z)
    |      |                           ^~~~~~~~~~~~~~~
    |      |                           |
    |      |                           (7) ...to here
util.c:1374:28: note: in expansion of macro 'fwrite'
    | 1374 |           size_t written = fwrite (base, sizeof (char), to_write, 
outfile);
    |      |                            ^~~~~~
    |
  'output_1_line': event 8
    |
    |../lib/unlocked-io.h:94:27:
    |   94 | #  define fwrite(w,x,y,z) fwrite_unlocked (w,x,y,z)
    |      |                           ^~~~~~~~~~~~~~~
    |      |                           |
    |      |                           (8) following 'false' branch (when 
'__cnt == 0')...
util.c:1374:28: note: in expansion of macro 'fwrite'
    | 1374 |           size_t written = fwrite (base, sizeof (char), to_write, 
outfile);
    |      |                            ^~~~~~
    |
  'output_1_line': event 9
    |
    |../lib/unlocked-io.h:94:27:
    |   94 | #  define fwrite(w,x,y,z) fwrite_unlocked (w,x,y,z)
    |      |                           ^~~~~~~~~~~~~~~
    |      |                           |
    |      |                           (9) ...to here
util.c:1374:28: note: in expansion of macro 'fwrite'
    | 1374 |           size_t written = fwrite (base, sizeof (char), to_write, 
outfile);
    |      |                            ^~~~~~
    |
  'output_1_line': events 10-12
    |
    | 1375 |           if (written < to_write)
    |      |              ^
    |      |              |
    |      |              (10) following 'false' branch...
    | 1376 |             return;
    | 1377 |           base += written;
    |      |           ~~~~
    |      |           |
    |      |           (11) ...to here
    | 1378 |           left -= written;
    | 1379 |           process_signals ();
    |      |           ~~~~~~~~~~~~~~~~~~
    |      |           |
    |      |           (12) calling 'process_signals' from 'output_1_line'
    |
    +--> 'process_signals': events 13-16
           |
           |  260 | process_signals (void)
           |      | ^~~~~~~~~~~~~~~
           |      | |
           |      | (13) entry to 'process_signals'
           |  261 | {
           |  262 |   while (interrupt_signal | stop_signal_count)
           |      |          ~~~~~~~~~~~~~~~~
           |      |          |
           |      |          (14) following 'true' branch...
           |  263 |     {
           |  264 |       set_color_context (RESET_CONTEXT);
           |      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |       |
           |      |       (15) ...to here
           |      |       (16) calling 'set_color_context' from 
'process_signals'
           |
           +--> 'set_color_context': events 17-19
                  |
                  | 1449 | set_color_context (enum color_context color_context)
                  |      | ^~~~~~~~~~~~~~~~~
                  |      | |
                  |      | (17) entry to 'set_color_context'
                  | 1450 | {
                  | 1451 |   if (color_context != RESET_CONTEXT)
                  |      |      ~
                  |      |      |
                  |      |      (18) following 'false' branch (when 
'color_context == 3')...
                  | 1452 |     process_signals ();
                  | 1453 |   if (colors_enabled && last_context != 
color_context)
                  |      |   ~~
                  |      |   |
                  |      |   (19) ...to here
                  |
           <------+
           |
         'process_signals': events 20-21
           |
           |  264 |       set_color_context (RESET_CONTEXT);
           |      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |       |
           |      |       (20) returning to 'process_signals' from 
'set_color_context'
           |......
           |  268 |       xsigprocmask (SIG_BLOCK, &caught_signals, &oldset);
           |      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |       |
           |      |       (21) calling 'xsigprocmask' from 'process_signals'
           |
           +--> 'xsigprocmask': events 22-24
                  |
                  |  212 | xsigprocmask (int how, sigset_t const *restrict set, 
sigset_t *restrict oset)
                  |      | ^~~~~~~~~~~~
                  |      | |
                  |      | (22) entry to 'xsigprocmask'
                  |  213 | {
                  |  214 |   if (sigprocmask (how, set, oset) != 0)
                  |      |      ~
                  |      |      |
                  |      |      (23) following 'false' branch...
                  |  215 |     pfatal_with_name ("sigprocmask");
                  |  216 | }
                  |      | ~
                  |      | |
                  |      | (24) ...to here
                  |
           <------+
           |
         'process_signals': events 25-28
           |
           |  268 |       xsigprocmask (SIG_BLOCK, &caught_signals, &oldset);
           |      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |       |
           |      |       (25) returning to 'process_signals' from 
'xsigprocmask'
           |......
           |  289 |       if (raise (sig) != 0)
           |      |          ~
           |      |          |
           |      |          (26) following 'false' branch...
           |  290 |         pfatal_with_name ("raise");
           |  291 |       xsigprocmask (SIG_SETMASK, &oldset, NULL);
           |      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |       |
           |      |       (27) ...to here
           |      |       (28) calling 'xsigprocmask' from 'process_signals'
           |
           +--> 'xsigprocmask': event 29
                  |
                  |  212 | xsigprocmask (int how, sigset_t const *restrict set, 
sigset_t *restrict oset)
                  |      | ^~~~~~~~~~~~
                  |      | |
                  |      | (29) entry to 'xsigprocmask'
                  |
                'xsigprocmask': event 30
                  |
                  |cc1:
                  | (30): calling 'xsigprocmask.part.0' from 'xsigprocmask'
                  |
                  +--> 'xsigprocmask.part.0': events 31-32
                         |
                         |  212 | xsigprocmask (int how, sigset_t const 
*restrict set, sigset_t *restrict oset)
                         |      | ^~~~~~~~~~~~
                         |      | |
                         |      | (31) entry to 'xsigprocmask.part.0'
                         |......
                         |  215 |     pfatal_with_name ("sigprocmask");
                         |      |     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                         |      |     |
                         |      |     (32) calling 'pfatal_with_name' from 
'xsigprocmask.part.0'
                         |
                         +--> 'pfatal_with_name': events 33-34
                                |
                                |   87 | pfatal_with_name (char const *name)
                                |      | ^~~~~~~~~~~~~~~~
                                |      | |
                                |      | (33) entry to 'pfatal_with_name'
                                |......
                                |   90 |   print_message_queue ();
                                |      |   ~~~~~~~~~~~~~~~~~~~~~~
                                |      |   |
                                |      |   (34) calling 'print_message_queue' 
from 'pfatal_with_name'
                                |
                                +--> 'print_message_queue': events 35-43
                                       |
                                       |  159 | print_message_queue (void)
                                       |      | ^~~~~~~~~~~~~~~~~~~
                                       |      | |
                                       |      | (35) entry to 
'print_message_queue'
                                       |  160 | {
                                       |  161 |   for (struct msg *m = 
msg_chain; m; )
                                       |      |                                 
  ~
                                       |      |                                 
  |
                                       |      |                                 
  (37) following 'true' branch (when 'm' is non-NULL)...
                                       |......
                                       |  164 |       char const *p = m->args;
                                       |      |       ~~~~
                                       |      |       |
                                       |      |       (38) ...to here
                                       |  165 |       char const *plim = p + 
m->argbytes;
                                       |  166 |       char const *arg[4];
                                       |      |                   ~~~
                                       |      |                   |
                                       |      |                   (36) region 
created on stack here
                                       |  167 |       for (int i = 0; i < 4; 
i++)
                                       |      |                       ~~~~~
                                       |      |                         |
                                       |      |                         (39) 
following 'true' branch (when 'i != 4')...
                                       |      |                         (41) 
following 'false' branch (when 'i == 4')...
                                       |  168 |         {
                                       |  169 |           arg[i] = p;
                                       |      |           ~~~
                                       |      |           |
                                       |      |           (40) ...to here
                                       |......
                                       |  173 |       printf (_(m->msgid), 
arg[0], arg[1], arg[2], arg[3]);
                                       |      |       
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                       |      |       |
                                       |      |       (42) ...to here
                                       |      |       (43) use of uninitialized 
value 'arg[3]' here
                                       |
util.c:173:7: error: use of uninitialized value 'arg[1]' [CWE-457] 
[-Werror=analyzer-use-of-uninitialized-value]
  173 |       printf (_(m->msgid), arg[0], arg[1], arg[2], arg[3]);
      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  'output_1_line': events 1-12
    |
    | 1364 | output_1_line (char const *base, char const *limit, char const 
*flag_format,
    |      | ^~~~~~~~~~~~~
    |      | |
    |      | (1) entry to 'output_1_line'
    |......
    | 1368 |   if (!expand_tabs)
    |      |      ~
    |      |      |
    |      |      (2) following 'false' branch...
    | 1369 |     {
    | 1370 |       size_t left = limit - base;
    |      |       ~~~~~~
    |      |       |
    |      |       (3) ...to here
    | 1371 |       while (left)
    |      |              ~~~~
    |      |              |
    |      |              (4) following 'true' branch (when 'left != 0')...
    |      |              (8) following 'true' branch (when 'left != 0')...
    | 1372 |         {
    | 1373 |           size_t to_write = MIN (left, MAX_CHUNK);
    |      |           ~~~~~~
    |      |           |
    |      |           (5) ...to here
    |      |           (9) ...to here
    | 1374 |           size_t written = fwrite (base, sizeof (char), to_write, 
outfile);
    | 1375 |           if (written < to_write)
    |      |              ~
    |      |              |
    |      |              (6) following 'false' branch...
    |      |              (10) following 'false' branch...
    | 1376 |             return;
    | 1377 |           base += written;
    |      |           ~~~~
    |      |           |
    |      |           (7) ...to here
    |      |           (11) ...to here
    | 1378 |           left -= written;
    | 1379 |           process_signals ();
    |      |           ~~~~~~~~~~~~~~~~~~
    |      |           |
    |      |           (12) calling 'process_signals' from 'output_1_line'
    |
    +--> 'process_signals': events 13-14
           |
           |  260 | process_signals (void)
           |      | ^~~~~~~~~~~~~~~
           |      | |
           |      | (13) entry to 'process_signals'
           |......
           |  264 |       set_color_context (RESET_CONTEXT);
           |      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |       |
           |      |       (14) calling 'set_color_context' from 
'process_signals'
           |
           +--> 'set_color_context': events 15-17
                  |
                  | 1449 | set_color_context (enum color_context color_context)
                  |      | ^~~~~~~~~~~~~~~~~
                  |      | |
                  |      | (15) entry to 'set_color_context'
                  | 1450 | {
                  | 1451 |   if (color_context != RESET_CONTEXT)
                  |      |      ~
                  |      |      |
                  |      |      (16) following 'false' branch (when 
'color_context == 3')...
                  | 1452 |     process_signals ();
                  | 1453 |   if (colors_enabled && last_context != 
color_context)
                  |      |   ~~
                  |      |   |
                  |      |   (17) ...to here
                  |
           <------+
           |
         'process_signals': events 18-19
           |
           |  264 |       set_color_context (RESET_CONTEXT);
           |      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |       |
           |      |       (18) returning to 'process_signals' from 
'set_color_context'
           |......
           |  268 |       xsigprocmask (SIG_BLOCK, &caught_signals, &oldset);
           |      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |       |
           |      |       (19) calling 'xsigprocmask' from 'process_signals'
           |
           +--> 'xsigprocmask': events 20-22
                  |
                  |  212 | xsigprocmask (int how, sigset_t const *restrict set, 
sigset_t *restrict oset)
                  |      | ^~~~~~~~~~~~
                  |      | |
                  |      | (20) entry to 'xsigprocmask'
                  |  213 | {
                  |  214 |   if (sigprocmask (how, set, oset) != 0)
                  |      |      ~
                  |      |      |
                  |      |      (21) following 'false' branch...
                  |  215 |     pfatal_with_name ("sigprocmask");
                  |  216 | }
                  |      | ~
                  |      | |
                  |      | (22) ...to here
                  |
           <------+
           |
         'process_signals': events 23-24
           |
           |  268 |       xsigprocmask (SIG_BLOCK, &caught_signals, &oldset);
           |      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |       |
           |      |       (23) returning to 'process_signals' from 
'xsigprocmask'
           |......
           |  285 |           xsignal (sig, SIG_DFL);
           |      |           ~~~~~~~~~~~~~~~~~~~~~~
           |      |           |
           |      |           (24) calling 'xsignal' from 'process_signals'
           |
           +--> 'xsignal': events 25-26
                  |
                  |  203 | xsignal (int sig, signal_handler func)
                  |      | ^~~~~~~
                  |      | |
                  |      | (25) entry to 'xsignal'
                  |......
                  |  207 |     pfatal_with_name ("signal");
                  |      |     ~~~~~~~~~~~~~~~~~~~~~~~~~~~
                  |      |     |
                  |      |     (26) calling 'pfatal_with_name' from 'xsignal'
                  |
                  +--> 'pfatal_with_name': events 27-28
                         |
                         |   87 | pfatal_with_name (char const *name)
                         |      | ^~~~~~~~~~~~~~~~
                         |      | |
                         |      | (27) entry to 'pfatal_with_name'
                         |......
                         |   90 |   print_message_queue ();
                         |      |   ~~~~~~~~~~~~~~~~~~~~~~
                         |      |   |
                         |      |   (28) calling 'print_message_queue' from 
'pfatal_with_name'
                         |
                         +--> 'print_message_queue': events 29-37
                                |
                                |  159 | print_message_queue (void)
                                |      | ^~~~~~~~~~~~~~~~~~~
                                |      | |
                                |      | (29) entry to 'print_message_queue'
                                |  160 | {
                                |  161 |   for (struct msg *m = msg_chain; m; )
                                |      |                                   ~
                                |      |                                   |
                                |      |                                   (31) 
following 'true' branch (when 'm' is non-NULL)...
                                |......
                                |  164 |       char const *p = m->args;
                                |      |       ~~~~
                                |      |       |
                                |      |       (32) ...to here
                                |  165 |       char const *plim = p + 
m->argbytes;
                                |  166 |       char const *arg[4];
                                |      |                   ~~~
                                |      |                   |
                                |      |                   (30) region created 
on stack here
                                |  167 |       for (int i = 0; i < 4; i++)
                                |      |                       ~~~~~
                                |      |                         |
                                |      |                         (33) following 
'true' branch (when 'i != 4')...
                                |      |                         (35) following 
'false' branch (when 'i == 4')...
                                |  168 |         {
                                |  169 |           arg[i] = p;
                                |      |           ~~~
                                |      |           |
                                |      |           (34) ...to here
                                |......
                                |  173 |       printf (_(m->msgid), arg[0], 
arg[1], arg[2], arg[3]);
                                |      |       
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                |      |       |
                                |      |       (36) ...to here
                                |      |       (37) use of uninitialized value 
'arg[1]' here
                                |
util.c:173:7: error: use of uninitialized value 'arg[2]' [CWE-457] 
[-Werror=analyzer-use-of-uninitialized-value]
  173 |       printf (_(m->msgid), arg[0], arg[1], arg[2], arg[3]);
      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  'output_1_line': events 1-12
    |
    | 1364 | output_1_line (char const *base, char const *limit, char const 
*flag_format,
    |      | ^~~~~~~~~~~~~
    |      | |
    |      | (1) entry to 'output_1_line'
    |......
    | 1368 |   if (!expand_tabs)
    |      |      ~
    |      |      |
    |      |      (2) following 'false' branch...
    | 1369 |     {
    | 1370 |       size_t left = limit - base;
    |      |       ~~~~~~
    |      |       |
    |      |       (3) ...to here
    | 1371 |       while (left)
    |      |              ~~~~
    |      |              |
    |      |              (4) following 'true' branch (when 'left != 0')...
    |      |              (8) following 'true' branch (when 'left != 0')...
    | 1372 |         {
    | 1373 |           size_t to_write = MIN (left, MAX_CHUNK);
    |      |           ~~~~~~
    |      |           |
    |      |           (5) ...to here
    |      |           (9) ...to here
    | 1374 |           size_t written = fwrite (base, sizeof (char), to_write, 
outfile);
    | 1375 |           if (written < to_write)
    |      |              ~
    |      |              |
    |      |              (6) following 'false' branch...
    |      |              (10) following 'false' branch...
    | 1376 |             return;
    | 1377 |           base += written;
    |      |           ~~~~
    |      |           |
    |      |           (7) ...to here
    |      |           (11) ...to here
    | 1378 |           left -= written;
    | 1379 |           process_signals ();
    |      |           ~~~~~~~~~~~~~~~~~~
    |      |           |
    |      |           (12) calling 'process_signals' from 'output_1_line'
    |
    +--> 'process_signals': events 13-14
           |
           |  260 | process_signals (void)
           |      | ^~~~~~~~~~~~~~~
           |      | |
           |      | (13) entry to 'process_signals'
           |......
           |  264 |       set_color_context (RESET_CONTEXT);
           |      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |       |
           |      |       (14) calling 'set_color_context' from 
'process_signals'
           |
           +--> 'set_color_context': events 15-17
                  |
                  | 1449 | set_color_context (enum color_context color_context)
                  |      | ^~~~~~~~~~~~~~~~~
                  |      | |
                  |      | (15) entry to 'set_color_context'
                  | 1450 | {
                  | 1451 |   if (color_context != RESET_CONTEXT)
                  |      |      ~
                  |      |      |
                  |      |      (16) following 'false' branch (when 
'color_context == 3')...
                  | 1452 |     process_signals ();
                  | 1453 |   if (colors_enabled && last_context != 
color_context)
                  |      |   ~~
                  |      |   |
                  |      |   (17) ...to here
                  |
           <------+
           |
         'process_signals': events 18-19
           |
           |  264 |       set_color_context (RESET_CONTEXT);
           |      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |       |
           |      |       (18) returning to 'process_signals' from 
'set_color_context'
           |......
           |  268 |       xsigprocmask (SIG_BLOCK, &caught_signals, &oldset);
           |      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |       |
           |      |       (19) calling 'xsigprocmask' from 'process_signals'
           |
           +--> 'xsigprocmask': events 20-22
                  |
                  |  212 | xsigprocmask (int how, sigset_t const *restrict set, 
sigset_t *restrict oset)
                  |      | ^~~~~~~~~~~~
                  |      | |
                  |      | (20) entry to 'xsigprocmask'
                  |  213 | {
                  |  214 |   if (sigprocmask (how, set, oset) != 0)
                  |      |      ~
                  |      |      |
                  |      |      (21) following 'false' branch...
                  |  215 |     pfatal_with_name ("sigprocmask");
                  |  216 | }
                  |      | ~
                  |      | |
                  |      | (22) ...to here
                  |
           <------+
           |
         'process_signals': events 23-24
           |
           |  268 |       xsigprocmask (SIG_BLOCK, &caught_signals, &oldset);
           |      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |       |
           |      |       (23) returning to 'process_signals' from 
'xsigprocmask'
           |......
           |  285 |           xsignal (sig, SIG_DFL);
           |      |           ~~~~~~~~~~~~~~~~~~~~~~
           |      |           |
           |      |           (24) calling 'xsignal' from 'process_signals'
           |
           +--> 'xsignal': events 25-26
                  |
                  |  203 | xsignal (int sig, signal_handler func)
                  |      | ^~~~~~~
                  |      | |
                  |      | (25) entry to 'xsignal'
                  |......
                  |  207 |     pfatal_with_name ("signal");
                  |      |     ~~~~~~~~~~~~~~~~~~~~~~~~~~~
                  |      |     |
                  |      |     (26) calling 'pfatal_with_name' from 'xsignal'
                  |
                  +--> 'pfatal_with_name': events 27-28
                         |
                         |   87 | pfatal_with_name (char const *name)
                         |      | ^~~~~~~~~~~~~~~~
                         |      | |
                         |      | (27) entry to 'pfatal_with_name'
                         |......
                         |   90 |   print_message_queue ();
                         |      |   ~~~~~~~~~~~~~~~~~~~~~~
                         |      |   |
                         |      |   (28) calling 'print_message_queue' from 
'pfatal_with_name'
                         |
                         +--> 'print_message_queue': events 29-37
                                |
                                |  159 | print_message_queue (void)
                                |      | ^~~~~~~~~~~~~~~~~~~
                                |      | |
                                |      | (29) entry to 'print_message_queue'
                                |  160 | {
                                |  161 |   for (struct msg *m = msg_chain; m; )
                                |      |                                   ~
                                |      |                                   |
                                |      |                                   (31) 
following 'true' branch (when 'm' is non-NULL)...
                                |......
                                |  164 |       char const *p = m->args;
                                |      |       ~~~~
                                |      |       |
                                |      |       (32) ...to here
                                |  165 |       char const *plim = p + 
m->argbytes;
                                |  166 |       char const *arg[4];
                                |      |                   ~~~
                                |      |                   |
                                |      |                   (30) region created 
on stack here
                                |  167 |       for (int i = 0; i < 4; i++)
                                |      |                       ~~~~~
                                |      |                         |
                                |      |                         (33) following 
'true' branch (when 'i != 4')...
                                |      |                         (35) following 
'false' branch (when 'i == 4')...
                                |  168 |         {
                                |  169 |           arg[i] = p;
                                |      |           ~~~
                                |      |           |
                                |      |           (34) ...to here
                                |......
                                |  173 |       printf (_(m->msgid), arg[0], 
arg[1], arg[2], arg[3]);
                                |      |       
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                |      |       |
                                |      |       (36) ...to here
                                |      |       (37) use of uninitialized value 
'arg[2]' here
                                |
util.c:173:7: error: use of uninitialized value 'arg[3]' [CWE-457] 
[-Werror=analyzer-use-of-uninitialized-value]
  173 |       printf (_(m->msgid), arg[0], arg[1], arg[2], arg[3]);
      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  'output_1_line': events 1-12
    |
    | 1364 | output_1_line (char const *base, char const *limit, char const 
*flag_format,
    |      | ^~~~~~~~~~~~~
    |      | |
    |      | (1) entry to 'output_1_line'
    |......
    | 1368 |   if (!expand_tabs)
    |      |      ~
    |      |      |
    |      |      (2) following 'false' branch...
    | 1369 |     {
    | 1370 |       size_t left = limit - base;
    |      |       ~~~~~~
    |      |       |
    |      |       (3) ...to here
    | 1371 |       while (left)
    |      |              ~~~~
    |      |              |
    |      |              (4) following 'true' branch (when 'left != 0')...
    |      |              (8) following 'true' branch (when 'left != 0')...
    | 1372 |         {
    | 1373 |           size_t to_write = MIN (left, MAX_CHUNK);
    |      |           ~~~~~~
    |      |           |
    |      |           (5) ...to here
    |      |           (9) ...to here
    | 1374 |           size_t written = fwrite (base, sizeof (char), to_write, 
outfile);
    | 1375 |           if (written < to_write)
    |      |              ~
    |      |              |
    |      |              (6) following 'false' branch...
    |      |              (10) following 'false' branch...
    | 1376 |             return;
    | 1377 |           base += written;
    |      |           ~~~~
    |      |           |
    |      |           (7) ...to here
    |      |           (11) ...to here
    | 1378 |           left -= written;
    | 1379 |           process_signals ();
    |      |           ~~~~~~~~~~~~~~~~~~
    |      |           |
    |      |           (12) calling 'process_signals' from 'output_1_line'
    |
    +--> 'process_signals': events 13-14
           |
           |  260 | process_signals (void)
           |      | ^~~~~~~~~~~~~~~
           |      | |
           |      | (13) entry to 'process_signals'
           |......
           |  264 |       set_color_context (RESET_CONTEXT);
           |      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |       |
           |      |       (14) calling 'set_color_context' from 
'process_signals'
           |
           +--> 'set_color_context': events 15-17
                  |
                  | 1449 | set_color_context (enum color_context color_context)
                  |      | ^~~~~~~~~~~~~~~~~
                  |      | |
                  |      | (15) entry to 'set_color_context'
                  | 1450 | {
                  | 1451 |   if (color_context != RESET_CONTEXT)
                  |      |      ~
                  |      |      |
                  |      |      (16) following 'false' branch (when 
'color_context == 3')...
                  | 1452 |     process_signals ();
                  | 1453 |   if (colors_enabled && last_context != 
color_context)
                  |      |   ~~
                  |      |   |
                  |      |   (17) ...to here
                  |
           <------+
           |
         'process_signals': events 18-19
           |
           |  264 |       set_color_context (RESET_CONTEXT);
           |      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |       |
           |      |       (18) returning to 'process_signals' from 
'set_color_context'
           |......
           |  268 |       xsigprocmask (SIG_BLOCK, &caught_signals, &oldset);
           |      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |       |
           |      |       (19) calling 'xsigprocmask' from 'process_signals'
           |
           +--> 'xsigprocmask': events 20-22
                  |
                  |  212 | xsigprocmask (int how, sigset_t const *restrict set, 
sigset_t *restrict oset)
                  |      | ^~~~~~~~~~~~
                  |      | |
                  |      | (20) entry to 'xsigprocmask'
                  |  213 | {
                  |  214 |   if (sigprocmask (how, set, oset) != 0)
                  |      |      ~
                  |      |      |
                  |      |      (21) following 'false' branch...
                  |  215 |     pfatal_with_name ("sigprocmask");
                  |  216 | }
                  |      | ~
                  |      | |
                  |      | (22) ...to here
                  |
           <------+
           |
         'process_signals': events 23-24
           |
           |  268 |       xsigprocmask (SIG_BLOCK, &caught_signals, &oldset);
           |      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |       |
           |      |       (23) returning to 'process_signals' from 
'xsigprocmask'
           |......
           |  285 |           xsignal (sig, SIG_DFL);
           |      |           ~~~~~~~~~~~~~~~~~~~~~~
           |      |           |
           |      |           (24) calling 'xsignal' from 'process_signals'
           |
           +--> 'xsignal': events 25-26
                  |
                  |  203 | xsignal (int sig, signal_handler func)
                  |      | ^~~~~~~
                  |      | |
                  |      | (25) entry to 'xsignal'
                  |......
                  |  207 |     pfatal_with_name ("signal");
                  |      |     ~~~~~~~~~~~~~~~~~~~~~~~~~~~
                  |      |     |
                  |      |     (26) calling 'pfatal_with_name' from 'xsignal'
                  |
                  +--> 'pfatal_with_name': events 27-28
                         |
                         |   87 | pfatal_with_name (char const *name)
                         |      | ^~~~~~~~~~~~~~~~
                         |      | |
                         |      | (27) entry to 'pfatal_with_name'
                         |......
                         |   90 |   print_message_queue ();
                         |      |   ~~~~~~~~~~~~~~~~~~~~~~
                         |      |   |
                         |      |   (28) calling 'print_message_queue' from 
'pfatal_with_name'
                         |
                         +--> 'print_message_queue': events 29-37
                                |
                                |  159 | print_message_queue (void)
                                |      | ^~~~~~~~~~~~~~~~~~~
                                |      | |
                                |      | (29) entry to 'print_message_queue'
                                |  160 | {
                                |  161 |   for (struct msg *m = msg_chain; m; )
                                |      |                                   ~
                                |      |                                   |
                                |      |                                   (31) 
following 'true' branch (when 'm' is non-NULL)...
                                |......
                                |  164 |       char const *p = m->args;
                                |      |       ~~~~
                                |      |       |
                                |      |       (32) ...to here
                                |  165 |       char const *plim = p + 
m->argbytes;
                                |  166 |       char const *arg[4];
                                |      |                   ~~~
                                |      |                   |
                                |      |                   (30) region created 
on stack here
                                |  167 |       for (int i = 0; i < 4; i++)
                                |      |                       ~~~~~
                                |      |                         |
                                |      |                         (33) following 
'true' branch (when 'i != 4')...
                                |      |                         (35) following 
'false' branch (when 'i == 4')...
                                |  168 |         {
                                |  169 |           arg[i] = p;
                                |      |           ~~~
                                |      |           |
                                |      |           (34) ...to here
                                |......
                                |  173 |       printf (_(m->msgid), arg[0], 
arg[1], arg[2], arg[3]);
                                |      |       
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                |      |       |
                                |      |       (36) ...to here
                                |      |       (37) use of uninitialized value 
'arg[3]' here
                                |
util.c:173:7: error: use of uninitialized value 'arg[1]' [CWE-457] 
[-Werror=analyzer-use-of-uninitialized-value]
  173 |       printf (_(m->msgid), arg[0], arg[1], arg[2], arg[3]);
      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  'set_color_context': events 1-4
    |
    | 1449 | set_color_context (enum color_context color_context)
    |      | ^~~~~~~~~~~~~~~~~
    |      | |
    |      | (1) entry to 'set_color_context'
    | 1450 | {
    | 1451 |   if (color_context != RESET_CONTEXT)
    |      |      ~
    |      |      |
    |      |      (2) following 'true' branch (when 'color_context != 3')...
    | 1452 |     process_signals ();
    |      |     ~~~~~~~~~~~~~~~~~~
    |      |     |
    |      |     (3) ...to here
    |      |     (4) calling 'process_signals' from 'set_color_context'
    |
    +--> 'process_signals': events 5-8
           |
           |  260 | process_signals (void)
           |      | ^~~~~~~~~~~~~~~
           |      | |
           |      | (5) entry to 'process_signals'
           |  261 | {
           |  262 |   while (interrupt_signal | stop_signal_count)
           |      |          ~~~~~~~~~~~~~~~~
           |      |          |
           |      |          (6) following 'true' branch...
           |  263 |     {
           |  264 |       set_color_context (RESET_CONTEXT);
           |      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |       |
           |      |       (7) ...to here
           |      |       (8) calling 'set_color_context' from 'process_signals'
           |
           +--> 'set_color_context': events 9-11
                  |
                  | 1449 | set_color_context (enum color_context color_context)
                  |      | ^~~~~~~~~~~~~~~~~
                  |      | |
                  |      | (9) entry to 'set_color_context'
                  | 1450 | {
                  | 1451 |   if (color_context != RESET_CONTEXT)
                  |      |      ~
                  |      |      |
                  |      |      (10) following 'false' branch (when 
'color_context == 3')...
                  | 1452 |     process_signals ();
                  | 1453 |   if (colors_enabled && last_context != 
color_context)
                  |      |   ~~
                  |      |   |
                  |      |   (11) ...to here
                  |
           <------+
           |
         'process_signals': events 12-13
           |
           |  264 |       set_color_context (RESET_CONTEXT);
           |      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |       |
           |      |       (12) returning to 'process_signals' from 
'set_color_context'
           |......
           |  268 |       xsigprocmask (SIG_BLOCK, &caught_signals, &oldset);
           |      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |       |
           |      |       (13) calling 'xsigprocmask' from 'process_signals'
           |
           +--> 'xsigprocmask': events 14-16
                  |
                  |  212 | xsigprocmask (int how, sigset_t const *restrict set, 
sigset_t *restrict oset)
                  |      | ^~~~~~~~~~~~
                  |      | |
                  |      | (14) entry to 'xsigprocmask'
                  |  213 | {
                  |  214 |   if (sigprocmask (how, set, oset) != 0)
                  |      |      ~
                  |      |      |
                  |      |      (15) following 'false' branch...
                  |  215 |     pfatal_with_name ("sigprocmask");
                  |  216 | }
                  |      | ~
                  |      | |
                  |      | (16) ...to here
                  |
           <------+
           |
         'process_signals': events 17-20
           |
           |  268 |       xsigprocmask (SIG_BLOCK, &caught_signals, &oldset);
           |      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |       |
           |      |       (17) returning to 'process_signals' from 
'xsigprocmask'
           |......
           |  289 |       if (raise (sig) != 0)
           |      |          ~
           |      |          |
           |      |          (18) following 'false' branch...
           |  290 |         pfatal_with_name ("raise");
           |  291 |       xsigprocmask (SIG_SETMASK, &oldset, NULL);
           |      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |       |
           |      |       (19) ...to here
           |      |       (20) calling 'xsigprocmask' from 'process_signals'
           |
           +--> 'xsigprocmask': events 21-23
                  |
                  |  212 | xsigprocmask (int how, sigset_t const *restrict set, 
sigset_t *restrict oset)
                  |      | ^~~~~~~~~~~~
                  |      | |
                  |      | (21) entry to 'xsigprocmask'
                  |  213 | {
                  |  214 |   if (sigprocmask (how, set, oset) != 0)
                  |      |      ~
                  |      |      |
                  |      |      (22) following 'false' branch...
                  |  215 |     pfatal_with_name ("sigprocmask");
                  |  216 | }
                  |      | ~
                  |      | |
                  |      | (23) ...to here
                  |
           <------+
           |
         'process_signals': events 24-27
           |
           |  262 |   while (interrupt_signal | stop_signal_count)
           |      |          ~~~~~~~~~~~~~~~~
           |      |          |
           |      |          (25) following 'true' branch...
           |  263 |     {
           |  264 |       set_color_context (RESET_CONTEXT);
           |      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |       |
           |      |       (26) ...to here
           |      |       (27) calling 'set_color_context' from 
'process_signals'
           |......
           |  291 |       xsigprocmask (SIG_SETMASK, &oldset, NULL);
           |      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |       |
           |      |       (24) returning to 'process_signals' from 
'xsigprocmask'
           |
           +--> 'set_color_context': events 28-30
                  |
                  | 1449 | set_color_context (enum color_context color_context)
                  |      | ^~~~~~~~~~~~~~~~~
                  |      | |
                  |      | (28) entry to 'set_color_context'
                  | 1450 | {
                  | 1451 |   if (color_context != RESET_CONTEXT)
                  |      |      ~
                  |      |      |
                  |      |      (29) following 'false' branch (when 
'color_context == 3')...
                  | 1452 |     process_signals ();
                  | 1453 |   if (colors_enabled && last_context != 
color_context)
                  |      |   ~~
                  |      |   |
                  |      |   (30) ...to here
                  |
           <------+
           |
         'process_signals': events 31-32
           |
           |  264 |       set_color_context (RESET_CONTEXT);
           |      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |       |
           |      |       (31) returning to 'process_signals' from 
'set_color_context'
           |......
           |  268 |       xsigprocmask (SIG_BLOCK, &caught_signals, &oldset);
           |      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |       |
           |      |       (32) calling 'xsigprocmask' from 'process_signals'
           |
           +--> 'xsigprocmask': events 33-35
                  |
                  |  212 | xsigprocmask (int how, sigset_t const *restrict set, 
sigset_t *restrict oset)
                  |      | ^~~~~~~~~~~~
                  |      | |
                  |      | (33) entry to 'xsigprocmask'
                  |  213 | {
                  |  214 |   if (sigprocmask (how, set, oset) != 0)
                  |      |      ~
                  |      |      |
                  |      |      (34) following 'false' branch...
                  |  215 |     pfatal_with_name ("sigprocmask");
                  |  216 | }
                  |      | ~
                  |      | |
                  |      | (35) ...to here
                  |
           <------+
           |
         'process_signals': events 36-37
           |
           |  268 |       xsigprocmask (SIG_BLOCK, &caught_signals, &oldset);
           |      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |       |
           |      |       (36) returning to 'process_signals' from 
'xsigprocmask'
           |......
           |  285 |           xsignal (sig, SIG_DFL);
           |      |           ~~~~~~~~~~~~~~~~~~~~~~
           |      |           |
           |      |           (37) calling 'xsignal' from 'process_signals'
           |
           +--> 'xsignal': events 38-39
                  |
                  |  203 | xsignal (int sig, signal_handler func)
                  |      | ^~~~~~~
                  |      | |
                  |      | (38) entry to 'xsignal'
                  |......
                  |  207 |     pfatal_with_name ("signal");
                  |      |     ~~~~~~~~~~~~~~~~~~~~~~~~~~~
                  |      |     |
                  |      |     (39) calling 'pfatal_with_name' from 'xsignal'
                  |
                  +--> 'pfatal_with_name': events 40-41
                         |
                         |   87 | pfatal_with_name (char const *name)
                         |      | ^~~~~~~~~~~~~~~~
                         |      | |
                         |      | (40) entry to 'pfatal_with_name'
                         |......
                         |   90 |   print_message_queue ();
                         |      |   ~~~~~~~~~~~~~~~~~~~~~~
                         |      |   |
                         |      |   (41) calling 'print_message_queue' from 
'pfatal_with_name'
                         |
                         +--> 'print_message_queue': events 42-50
                                |
                                |  159 | print_message_queue (void)
                                |      | ^~~~~~~~~~~~~~~~~~~
                                |      | |
                                |      | (42) entry to 'print_message_queue'
                                |  160 | {
                                |  161 |   for (struct msg *m = msg_chain; m; )
                                |      |                                   ~
                                |      |                                   |
                                |      |                                   (44) 
following 'true' branch (when 'm' is non-NULL)...
                                |......
                                |  164 |       char const *p = m->args;
                                |      |       ~~~~
                                |      |       |
                                |      |       (45) ...to here
                                |  165 |       char const *plim = p + 
m->argbytes;
                                |  166 |       char const *arg[4];
                                |      |                   ~~~
                                |      |                   |
                                |      |                   (43) region created 
on stack here
                                |  167 |       for (int i = 0; i < 4; i++)
                                |      |                       ~~~~~
                                |      |                         |
                                |      |                         (46) following 
'true' branch (when 'i != 4')...
                                |      |                         (48) following 
'false' branch (when 'i == 4')...
                                |  168 |         {
                                |  169 |           arg[i] = p;
                                |      |           ~~~
                                |      |           |
                                |      |           (47) ...to here
                                |......
                                |  173 |       printf (_(m->msgid), arg[0], 
arg[1], arg[2], arg[3]);
                                |      |       
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                |      |       |
                                |      |       (49) ...to here
                                |      |       (50) use of uninitialized value 
'arg[1]' here
                                |
util.c:173:7: error: use of uninitialized value 'arg[3]' [CWE-457] 
[-Werror=analyzer-use-of-uninitialized-value]
  173 |       printf (_(m->msgid), arg[0], arg[1], arg[2], arg[3]);
      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  'set_color_context': events 1-4
    |
    | 1449 | set_color_context (enum color_context color_context)
    |      | ^~~~~~~~~~~~~~~~~
    |      | |
    |      | (1) entry to 'set_color_context'
    | 1450 | {
    | 1451 |   if (color_context != RESET_CONTEXT)
    |      |      ~
    |      |      |
    |      |      (2) following 'true' branch (when 'color_context != 3')...
    | 1452 |     process_signals ();
    |      |     ~~~~~~~~~~~~~~~~~~
    |      |     |
    |      |     (3) ...to here
    |      |     (4) calling 'process_signals' from 'set_color_context'
    |
    +--> 'process_signals': events 5-8
           |
           |  260 | process_signals (void)
           |      | ^~~~~~~~~~~~~~~
           |      | |
           |      | (5) entry to 'process_signals'
           |  261 | {
           |  262 |   while (interrupt_signal | stop_signal_count)
           |      |          ~~~~~~~~~~~~~~~~
           |      |          |
           |      |          (6) following 'true' branch...
           |  263 |     {
           |  264 |       set_color_context (RESET_CONTEXT);
           |      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |       |
           |      |       (7) ...to here
           |      |       (8) calling 'set_color_context' from 'process_signals'
           |
           +--> 'set_color_context': events 9-11
                  |
                  | 1449 | set_color_context (enum color_context color_context)
                  |      | ^~~~~~~~~~~~~~~~~
                  |      | |
                  |      | (9) entry to 'set_color_context'
                  | 1450 | {
                  | 1451 |   if (color_context != RESET_CONTEXT)
                  |      |      ~
                  |      |      |
                  |      |      (10) following 'false' branch (when 
'color_context == 3')...
                  | 1452 |     process_signals ();
                  | 1453 |   if (colors_enabled && last_context != 
color_context)
                  |      |   ~~
                  |      |   |
                  |      |   (11) ...to here
                  |
           <------+
           |
         'process_signals': events 12-13
           |
           |  264 |       set_color_context (RESET_CONTEXT);
           |      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |       |
           |      |       (12) returning to 'process_signals' from 
'set_color_context'
           |......
           |  268 |       xsigprocmask (SIG_BLOCK, &caught_signals, &oldset);
           |      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |       |
           |      |       (13) calling 'xsigprocmask' from 'process_signals'
           |
           +--> 'xsigprocmask': events 14-16
                  |
                  |  212 | xsigprocmask (int how, sigset_t const *restrict set, 
sigset_t *restrict oset)
                  |      | ^~~~~~~~~~~~
                  |      | |
                  |      | (14) entry to 'xsigprocmask'
                  |  213 | {
                  |  214 |   if (sigprocmask (how, set, oset) != 0)
                  |      |      ~
                  |      |      |
                  |      |      (15) following 'false' branch...
                  |  215 |     pfatal_with_name ("sigprocmask");
                  |  216 | }
                  |      | ~
                  |      | |
                  |      | (16) ...to here
                  |
           <------+
           |
         'process_signals': events 17-20
           |
           |  268 |       xsigprocmask (SIG_BLOCK, &caught_signals, &oldset);
           |      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |       |
           |      |       (17) returning to 'process_signals' from 
'xsigprocmask'
           |......
           |  289 |       if (raise (sig) != 0)
           |      |          ~
           |      |          |
           |      |          (18) following 'false' branch...
           |  290 |         pfatal_with_name ("raise");
           |  291 |       xsigprocmask (SIG_SETMASK, &oldset, NULL);
           |      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |       |
           |      |       (19) ...to here
           |      |       (20) calling 'xsigprocmask' from 'process_signals'
           |
           +--> 'xsigprocmask': events 21-23
                  |
                  |  212 | xsigprocmask (int how, sigset_t const *restrict set, 
sigset_t *restrict oset)
                  |      | ^~~~~~~~~~~~
                  |      | |
                  |      | (21) entry to 'xsigprocmask'
                  |  213 | {
                  |  214 |   if (sigprocmask (how, set, oset) != 0)
                  |      |      ~
                  |      |      |
                  |      |      (22) following 'false' branch...
                  |  215 |     pfatal_with_name ("sigprocmask");
                  |  216 | }
                  |      | ~
                  |      | |
                  |      | (23) ...to here
                  |
           <------+
           |
         'process_signals': events 24-27
           |
           |  262 |   while (interrupt_signal | stop_signal_count)
           |      |          ~~~~~~~~~~~~~~~~
           |      |          |
           |      |          (25) following 'true' branch...
           |  263 |     {
           |  264 |       set_color_context (RESET_CONTEXT);
           |      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |       |
           |      |       (26) ...to here
           |      |       (27) calling 'set_color_context' from 
'process_signals'
           |......
           |  291 |       xsigprocmask (SIG_SETMASK, &oldset, NULL);
           |      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |       |
           |      |       (24) returning to 'process_signals' from 
'xsigprocmask'
           |
           +--> 'set_color_context': events 28-30
                  |
                  | 1449 | set_color_context (enum color_context color_context)
                  |      | ^~~~~~~~~~~~~~~~~
                  |      | |
                  |      | (28) entry to 'set_color_context'
                  | 1450 | {
                  | 1451 |   if (color_context != RESET_CONTEXT)
                  |      |      ~
                  |      |      |
                  |      |      (29) following 'false' branch (when 
'color_context == 3')...
                  | 1452 |     process_signals ();
                  | 1453 |   if (colors_enabled && last_context != 
color_context)
                  |      |   ~~
                  |      |   |
                  |      |   (30) ...to here
                  |
           <------+
           |
         'process_signals': events 31-32
           |
           |  264 |       set_color_context (RESET_CONTEXT);
           |      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |       |
           |      |       (31) returning to 'process_signals' from 
'set_color_context'
           |......
           |  268 |       xsigprocmask (SIG_BLOCK, &caught_signals, &oldset);
           |      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |       |
           |      |       (32) calling 'xsigprocmask' from 'process_signals'
           |
           +--> 'xsigprocmask': events 33-35
                  |
                  |  212 | xsigprocmask (int how, sigset_t const *restrict set, 
sigset_t *restrict oset)
                  |      | ^~~~~~~~~~~~
                  |      | |
                  |      | (33) entry to 'xsigprocmask'
                  |  213 | {
                  |  214 |   if (sigprocmask (how, set, oset) != 0)
                  |      |      ~
                  |      |      |
                  |      |      (34) following 'false' branch...
                  |  215 |     pfatal_with_name ("sigprocmask");
                  |  216 | }
                  |      | ~
                  |      | |
                  |      | (35) ...to here
                  |
           <------+
           |
         'process_signals': events 36-37
           |
           |  268 |       xsigprocmask (SIG_BLOCK, &caught_signals, &oldset);
           |      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |       |
           |      |       (36) returning to 'process_signals' from 
'xsigprocmask'
           |......
           |  285 |           xsignal (sig, SIG_DFL);
           |      |           ~~~~~~~~~~~~~~~~~~~~~~
           |      |           |
           |      |           (37) calling 'xsignal' from 'process_signals'
           |
           +--> 'xsignal': events 38-39
                  |
                  |  203 | xsignal (int sig, signal_handler func)
                  |      | ^~~~~~~
                  |      | |
                  |      | (38) entry to 'xsignal'
                  |......
                  |  207 |     pfatal_with_name ("signal");
                  |      |     ~~~~~~~~~~~~~~~~~~~~~~~~~~~
                  |      |     |
                  |      |     (39) calling 'pfatal_with_name' from 'xsignal'
                  |
                  +--> 'pfatal_with_name': events 40-41
                         |
                         |   87 | pfatal_with_name (char const *name)
                         |      | ^~~~~~~~~~~~~~~~
                         |      | |
                         |      | (40) entry to 'pfatal_with_name'
                         |......
                         |   90 |   print_message_queue ();
                         |      |   ~~~~~~~~~~~~~~~~~~~~~~
                         |      |   |
                         |      |   (41) calling 'print_message_queue' from 
'pfatal_with_name'
                         |
                         +--> 'print_message_queue': events 42-50
                                |
                                |  159 | print_message_queue (void)
                                |      | ^~~~~~~~~~~~~~~~~~~
                                |      | |
                                |      | (42) entry to 'print_message_queue'
                                |  160 | {
                                |  161 |   for (struct msg *m = msg_chain; m; )
                                |      |                                   ~
                                |      |                                   |
                                |      |                                   (44) 
following 'true' branch (when 'm' is non-NULL)...
                                |......
                                |  164 |       char const *p = m->args;
                                |      |       ~~~~
                                |      |       |
                                |      |       (45) ...to here
                                |  165 |       char const *plim = p + 
m->argbytes;
                                |  166 |       char const *arg[4];
                                |      |                   ~~~
                                |      |                   |
                                |      |                   (43) region created 
on stack here
                                |  167 |       for (int i = 0; i < 4; i++)
                                |      |                       ~~~~~
                                |      |                         |
                                |      |                         (46) following 
'true' branch (when 'i != 4')...
                                |      |                         (48) following 
'false' branch (when 'i == 4')...
                                |  168 |         {
                                |  169 |           arg[i] = p;
                                |      |           ~~~
                                |      |           |
                                |      |           (47) ...to here
                                |......
                                |  173 |       printf (_(m->msgid), arg[0], 
arg[1], arg[2], arg[3]);
                                |      |       
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                |      |       |
                                |      |       (49) ...to here
                                |      |       (50) use of uninitialized value 
'arg[3]' here
                                |
util.c:173:7: error: use of uninitialized value 'arg[2]' [CWE-457] 
[-Werror=analyzer-use-of-uninitialized-value]
  173 |       printf (_(m->msgid), arg[0], arg[1], arg[2], arg[3]);
      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  'set_color_context': events 1-4
    |
    | 1449 | set_color_context (enum color_context color_context)
    |      | ^~~~~~~~~~~~~~~~~
    |      | |
    |      | (1) entry to 'set_color_context'
    | 1450 | {
    | 1451 |   if (color_context != RESET_CONTEXT)
    |      |      ~
    |      |      |
    |      |      (2) following 'true' branch (when 'color_context != 3')...
    | 1452 |     process_signals ();
    |      |     ~~~~~~~~~~~~~~~~~~
    |      |     |
    |      |     (3) ...to here
    |      |     (4) calling 'process_signals' from 'set_color_context'
    |
    +--> 'process_signals': events 5-8
           |
           |  260 | process_signals (void)
           |      | ^~~~~~~~~~~~~~~
           |      | |
           |      | (5) entry to 'process_signals'
           |  261 | {
           |  262 |   while (interrupt_signal | stop_signal_count)
           |      |          ~~~~~~~~~~~~~~~~
           |      |          |
           |      |          (6) following 'true' branch...
           |  263 |     {
           |  264 |       set_color_context (RESET_CONTEXT);
           |      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |       |
           |      |       (7) ...to here
           |      |       (8) calling 'set_color_context' from 'process_signals'
           |
           +--> 'set_color_context': events 9-11
                  |
                  | 1449 | set_color_context (enum color_context color_context)
                  |      | ^~~~~~~~~~~~~~~~~
                  |      | |
                  |      | (9) entry to 'set_color_context'
                  | 1450 | {
                  | 1451 |   if (color_context != RESET_CONTEXT)
                  |      |      ~
                  |      |      |
                  |      |      (10) following 'false' branch (when 
'color_context == 3')...
                  | 1452 |     process_signals ();
                  | 1453 |   if (colors_enabled && last_context != 
color_context)
                  |      |   ~~
                  |      |   |
                  |      |   (11) ...to here
                  |
           <------+
           |
         'process_signals': events 12-13
           |
           |  264 |       set_color_context (RESET_CONTEXT);
           |      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |       |
           |      |       (12) returning to 'process_signals' from 
'set_color_context'
           |......
           |  268 |       xsigprocmask (SIG_BLOCK, &caught_signals, &oldset);
           |      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |       |
           |      |       (13) calling 'xsigprocmask' from 'process_signals'
           |
           +--> 'xsigprocmask': events 14-16
                  |
                  |  212 | xsigprocmask (int how, sigset_t const *restrict set, 
sigset_t *restrict oset)
                  |      | ^~~~~~~~~~~~
                  |      | |
                  |      | (14) entry to 'xsigprocmask'
                  |  213 | {
                  |  214 |   if (sigprocmask (how, set, oset) != 0)
                  |      |      ~
                  |      |      |
                  |      |      (15) following 'false' branch...
                  |  215 |     pfatal_with_name ("sigprocmask");
                  |  216 | }
                  |      | ~
                  |      | |
                  |      | (16) ...to here
                  |
           <------+
           |
         'process_signals': events 17-20
           |
           |  268 |       xsigprocmask (SIG_BLOCK, &caught_signals, &oldset);
           |      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |       |
           |      |       (17) returning to 'process_signals' from 
'xsigprocmask'
           |......
           |  289 |       if (raise (sig) != 0)
           |      |          ~
           |      |          |
           |      |          (18) following 'false' branch...
           |  290 |         pfatal_with_name ("raise");
           |  291 |       xsigprocmask (SIG_SETMASK, &oldset, NULL);
           |      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |       |
           |      |       (19) ...to here
           |      |       (20) calling 'xsigprocmask' from 'process_signals'
           |
           +--> 'xsigprocmask': events 21-23
                  |
                  |  212 | xsigprocmask (int how, sigset_t const *restrict set, 
sigset_t *restrict oset)
                  |      | ^~~~~~~~~~~~
                  |      | |
                  |      | (21) entry to 'xsigprocmask'
                  |  213 | {
                  |  214 |   if (sigprocmask (how, set, oset) != 0)
                  |      |      ~
                  |      |      |
                  |      |      (22) following 'false' branch...
                  |  215 |     pfatal_with_name ("sigprocmask");
                  |  216 | }
                  |      | ~
                  |      | |
                  |      | (23) ...to here
                  |
           <------+
           |
         'process_signals': events 24-27
           |
           |  262 |   while (interrupt_signal | stop_signal_count)
           |      |          ~~~~~~~~~~~~~~~~
           |      |          |
           |      |          (25) following 'true' branch...
           |  263 |     {
           |  264 |       set_color_context (RESET_CONTEXT);
           |      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |       |
           |      |       (26) ...to here
           |      |       (27) calling 'set_color_context' from 
'process_signals'
           |......
           |  291 |       xsigprocmask (SIG_SETMASK, &oldset, NULL);
           |      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |       |
           |      |       (24) returning to 'process_signals' from 
'xsigprocmask'
           |
           +--> 'set_color_context': events 28-30
                  |
                  | 1449 | set_color_context (enum color_context color_context)
                  |      | ^~~~~~~~~~~~~~~~~
                  |      | |
                  |      | (28) entry to 'set_color_context'
                  | 1450 | {
                  | 1451 |   if (color_context != RESET_CONTEXT)
                  |      |      ~
                  |      |      |
                  |      |      (29) following 'false' branch (when 
'color_context == 3')...
                  | 1452 |     process_signals ();
                  | 1453 |   if (colors_enabled && last_context != 
color_context)
                  |      |   ~~
                  |      |   |
                  |      |   (30) ...to here
                  |
           <------+
           |
         'process_signals': events 31-32
           |
           |  264 |       set_color_context (RESET_CONTEXT);
           |      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |       |
           |      |       (31) returning to 'process_signals' from 
'set_color_context'
           |......
           |  268 |       xsigprocmask (SIG_BLOCK, &caught_signals, &oldset);
           |      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |       |
           |      |       (32) calling 'xsigprocmask' from 'process_signals'
           |
           +--> 'xsigprocmask': events 33-35
                  |
                  |  212 | xsigprocmask (int how, sigset_t const *restrict set, 
sigset_t *restrict oset)
                  |      | ^~~~~~~~~~~~
                  |      | |
                  |      | (33) entry to 'xsigprocmask'
                  |  213 | {
                  |  214 |   if (sigprocmask (how, set, oset) != 0)
                  |      |      ~
                  |      |      |
                  |      |      (34) following 'false' branch...
                  |  215 |     pfatal_with_name ("sigprocmask");
                  |  216 | }
                  |      | ~
                  |      | |
                  |      | (35) ...to here
                  |
           <------+
           |
         'process_signals': events 36-37
           |
           |  268 |       xsigprocmask (SIG_BLOCK, &caught_signals, &oldset);
           |      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |       |
           |      |       (36) returning to 'process_signals' from 
'xsigprocmask'
           |......
           |  285 |           xsignal (sig, SIG_DFL);
           |      |           ~~~~~~~~~~~~~~~~~~~~~~
           |      |           |
           |      |           (37) calling 'xsignal' from 'process_signals'
           |
           +--> 'xsignal': events 38-39
                  |
                  |  203 | xsignal (int sig, signal_handler func)
                  |      | ^~~~~~~
                  |      | |
                  |      | (38) entry to 'xsignal'
                  |......
                  |  207 |     pfatal_with_name ("signal");
                  |      |     ~~~~~~~~~~~~~~~~~~~~~~~~~~~
                  |      |     |
                  |      |     (39) calling 'pfatal_with_name' from 'xsignal'
                  |
                  +--> 'pfatal_with_name': events 40-41
                         |
                         |   87 | pfatal_with_name (char const *name)
                         |      | ^~~~~~~~~~~~~~~~
                         |      | |
                         |      | (40) entry to 'pfatal_with_name'
                         |......
                         |   90 |   print_message_queue ();
                         |      |   ~~~~~~~~~~~~~~~~~~~~~~
                         |      |   |
                         |      |   (41) calling 'print_message_queue' from 
'pfatal_with_name'
                         |
                         +--> 'print_message_queue': events 42-50
                                |
                                |  159 | print_message_queue (void)
                                |      | ^~~~~~~~~~~~~~~~~~~
                                |      | |
                                |      | (42) entry to 'print_message_queue'
                                |  160 | {
                                |  161 |   for (struct msg *m = msg_chain; m; )
                                |      |                                   ~
                                |      |                                   |
                                |      |                                   (44) 
following 'true' branch (when 'm' is non-NULL)...
                                |......
                                |  164 |       char const *p = m->args;
                                |      |       ~~~~
                                |      |       |
                                |      |       (45) ...to here
                                |  165 |       char const *plim = p + 
m->argbytes;
                                |  166 |       char const *arg[4];
                                |      |                   ~~~
                                |      |                   |
                                |      |                   (43) region created 
on stack here
                                |  167 |       for (int i = 0; i < 4; i++)
                                |      |                       ~~~~~
                                |      |                         |
                                |      |                         (46) following 
'true' branch (when 'i != 4')...
                                |      |                         (48) following 
'false' branch (when 'i == 4')...
                                |  168 |         {
                                |  169 |           arg[i] = p;
                                |      |           ~~~
                                |      |           |
                                |      |           (47) ...to here
                                |......
                                |  173 |       printf (_(m->msgid), arg[0], 
arg[1], arg[2], arg[3]);
                                |      |       
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                |      |       |
                                |      |       (49) ...to here
                                |      |       (50) use of uninitialized value 
'arg[2]' here
                                |
util.c:173:7: error: use of uninitialized value 'arg[2]' [CWE-457] 
[-Werror=analyzer-use-of-uninitialized-value]
  173 |       printf (_(m->msgid), arg[0], arg[1], arg[2], arg[3]);
      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  'print_1_line_nl': events 1-6
    |
    | 1320 | print_1_line_nl (char const *line_flag, char const *const *line, 
bool skip_nl)
    |      | ^~~~~~~~~~~~~~~
    |      | |
    |      | (1) entry to 'print_1_line_nl'
    |......
    | 1331 |   if (line_flag && *line_flag)
    |      |      ~~~~~~~~~~~~~~~~~~~~~~~~
    |      |      |          |  |
    |      |      |          |  (3) ...to here
    |      |      |          (4) following 'false' branch...
    |      |      (2) following 'true' branch (when 'line_flag' is non-NULL)...
    |......
    | 1349 |   output_1_line (base, limit - (skip_nl && limit[-1] == '\n'), 
flag_format, line_flag);
    |      |   
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    |      |   |
    |      |   (5) ...to here
    |      |   (6) calling 'output_1_line' from 'print_1_line_nl'
    |
    +--> 'output_1_line': events 7-18
           |
           | 1364 | output_1_line (char const *base, char const *limit, char 
const *flag_format,
           |      | ^~~~~~~~~~~~~
           |      | |
           |      | (7) entry to 'output_1_line'
           |......
           | 1368 |   if (!expand_tabs)
           |      |      ~
           |      |      |
           |      |      (8) following 'false' branch...
           | 1369 |     {
           | 1370 |       size_t left = limit - base;
           |      |       ~~~~~~
           |      |       |
           |      |       (9) ...to here
           | 1371 |       while (left)
           |      |              ~~~~
           |      |              |
           |      |              (10) following 'true' branch (when 'left != 
0')...
           |      |              (14) following 'true' branch (when 'left != 
0')...
           | 1372 |         {
           | 1373 |           size_t to_write = MIN (left, MAX_CHUNK);
           |      |           ~~~~~~
           |      |           |
           |      |           (11) ...to here
           |      |           (15) ...to here
           | 1374 |           size_t written = fwrite (base, sizeof (char), 
to_write, outfile);
           | 1375 |           if (written < to_write)
           |      |              ~
           |      |              |
           |      |              (12) following 'false' branch...
           |      |              (16) following 'false' branch...
           | 1376 |             return;
           | 1377 |           base += written;
           |      |           ~~~~
           |      |           |
           |      |           (13) ...to here
           |      |           (17) ...to here
           | 1378 |           left -= written;
           | 1379 |           process_signals ();
           |      |           ~~~~~~~~~~~~~~~~~~
           |      |           |
           |      |           (18) calling 'process_signals' from 
'output_1_line'
           |
           +--> 'process_signals': events 19-20
                  |
                  |  260 | process_signals (void)
                  |      | ^~~~~~~~~~~~~~~
                  |      | |
                  |      | (19) entry to 'process_signals'
                  |......
                  |  264 |       set_color_context (RESET_CONTEXT);
                  |      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                  |      |       |
                  |      |       (20) calling 'set_color_context' from 
'process_signals'
                  |
                  +--> 'set_color_context': events 21-23
                         |
                         | 1449 | set_color_context (enum color_context 
color_context)
                         |      | ^~~~~~~~~~~~~~~~~
                         |      | |
                         |      | (21) entry to 'set_color_context'
                         | 1450 | {
                         | 1451 |   if (color_context != RESET_CONTEXT)
                         |      |      ~
                         |      |      |
                         |      |      (22) following 'false' branch (when 
'color_context == 3')...
                         | 1452 |     process_signals ();
                         | 1453 |   if (colors_enabled && last_context != 
color_context)
                         |      |   ~~
                         |      |   |
                         |      |   (23) ...to here
                         |
                  <------+
                  |
                'process_signals': events 24-25
                  |
                  |  264 |       set_color_context (RESET_CONTEXT);
                  |      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                  |      |       |
                  |      |       (24) returning to 'process_signals' from 
'set_color_context'
                  |......
                  |  268 |       xsigprocmask (SIG_BLOCK, &caught_signals, 
&oldset);
                  |      |       
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                  |      |       |
                  |      |       (25) calling 'xsigprocmask' from 
'process_signals'
                  |
                  +--> 'xsigprocmask': events 26-28
                         |
                         |  212 | xsigprocmask (int how, sigset_t const 
*restrict set, sigset_t *restrict oset)
                         |      | ^~~~~~~~~~~~
                         |      | |
                         |      | (26) entry to 'xsigprocmask'
                         |  213 | {
                         |  214 |   if (sigprocmask (how, set, oset) != 0)
                         |      |      ~
                         |      |      |
                         |      |      (27) following 'false' branch...
                         |  215 |     pfatal_with_name ("sigprocmask");
                         |  216 | }
                         |      | ~
                         |      | |
                         |      | (28) ...to here
                         |
                  <------+
                  |
                'process_signals': events 29-30
                  |
                  |  268 |       xsigprocmask (SIG_BLOCK, &caught_signals, 
&oldset);
                  |      |       
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                  |      |       |
                  |      |       (29) returning to 'process_signals' from 
'xsigprocmask'
                  |......
                  |  285 |           xsignal (sig, SIG_DFL);
                  |      |           ~~~~~~~~~~~~~~~~~~~~~~
                  |      |           |
                  |      |           (30) calling 'xsignal' from 
'process_signals'
                  |
                  +--> 'xsignal': events 31-32
                         |
                         |  203 | xsignal (int sig, signal_handler func)
                         |      | ^~~~~~~
                         |      | |
                         |      | (31) entry to 'xsignal'
                         |......
                         |  207 |     pfatal_with_name ("signal");
                         |      |     ~~~~~~~~~~~~~~~~~~~~~~~~~~~
                         |      |     |
                         |      |     (32) calling 'pfatal_with_name' from 
'xsignal'
                         |
                         +--> 'pfatal_with_name': events 33-34
                                |
                                |   87 | pfatal_with_name (char const *name)
                                |      | ^~~~~~~~~~~~~~~~
                                |      | |
                                |      | (33) entry to 'pfatal_with_name'
                                |......
                                |   90 |   print_message_queue ();
                                |      |   ~~~~~~~~~~~~~~~~~~~~~~
                                |      |   |
                                |      |   (34) calling 'print_message_queue' 
from 'pfatal_with_name'
                                |
                                +--> 'print_message_queue': events 35-43
                                       |
                                       |  159 | print_message_queue (void)
                                       |      | ^~~~~~~~~~~~~~~~~~~
                                       |      | |
                                       |      | (35) entry to 
'print_message_queue'
                                       |  160 | {
                                       |  161 |   for (struct msg *m = 
msg_chain; m; )
                                       |      |                                 
  ~
                                       |      |                                 
  |
                                       |      |                                 
  (37) following 'true' branch (when 'm' is non-NULL)...
                                       |......
                                       |  164 |       char const *p = m->args;
                                       |      |       ~~~~
                                       |      |       |
                                       |      |       (38) ...to here
                                       |  165 |       char const *plim = p + 
m->argbytes;
                                       |  166 |       char const *arg[4];
                                       |      |                   ~~~
                                       |      |                   |
                                       |      |                   (36) region 
created on stack here
                                       |  167 |       for (int i = 0; i < 4; 
i++)
                                       |      |                       ~~~~~
                                       |      |                         |
                                       |      |                         (39) 
following 'true' branch (when 'i != 4')...
                                       |      |                         (41) 
following 'false' branch (when 'i == 4')...
                                       |  168 |         {
                                       |  169 |           arg[i] = p;
                                       |      |           ~~~
                                       |      |           |
                                       |      |           (40) ...to here
                                       |......
                                       |  173 |       printf (_(m->msgid), 
arg[0], arg[1], arg[2], arg[3]);
                                       |      |       
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                       |      |       |
                                       |      |       (42) ...to here
                                       |      |       (43) use of uninitialized 
value 'arg[2]' here
                                       |
util.c:173:7: error: use of uninitialized value 'arg[1]' [CWE-457] 
[-Werror=analyzer-use-of-uninitialized-value]
  173 |       printf (_(m->msgid), arg[0], arg[1], arg[2], arg[3]);
      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  'print_1_line_nl': events 1-6
    |
    | 1320 | print_1_line_nl (char const *line_flag, char const *const *line, 
bool skip_nl)
    |      | ^~~~~~~~~~~~~~~
    |      | |
    |      | (1) entry to 'print_1_line_nl'
    |......
    | 1331 |   if (line_flag && *line_flag)
    |      |      ~~~~~~~~~~~~~~~~~~~~~~~~
    |      |      |          |  |
    |      |      |          |  (3) ...to here
    |      |      |          (4) following 'false' branch...
    |      |      (2) following 'true' branch (when 'line_flag' is non-NULL)...
    |......
    | 1349 |   output_1_line (base, limit - (skip_nl && limit[-1] == '\n'), 
flag_format, line_flag);
    |      |   
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    |      |   |
    |      |   (5) ...to here
    |      |   (6) calling 'output_1_line' from 'print_1_line_nl'
    |
    +--> 'output_1_line': events 7-18
           |
           | 1364 | output_1_line (char const *base, char const *limit, char 
const *flag_format,
           |      | ^~~~~~~~~~~~~
           |      | |
           |      | (7) entry to 'output_1_line'
           |......
           | 1368 |   if (!expand_tabs)
           |      |      ~
           |      |      |
           |      |      (8) following 'false' branch...
           | 1369 |     {
           | 1370 |       size_t left = limit - base;
           |      |       ~~~~~~
           |      |       |
           |      |       (9) ...to here
           | 1371 |       while (left)
           |      |              ~~~~
           |      |              |
           |      |              (10) following 'true' branch (when 'left != 
0')...
           |      |              (14) following 'true' branch (when 'left != 
0')...
           | 1372 |         {
           | 1373 |           size_t to_write = MIN (left, MAX_CHUNK);
           |      |           ~~~~~~
           |      |           |
           |      |           (11) ...to here
           |      |           (15) ...to here
           | 1374 |           size_t written = fwrite (base, sizeof (char), 
to_write, outfile);
           | 1375 |           if (written < to_write)
           |      |              ~
           |      |              |
           |      |              (12) following 'false' branch...
           |      |              (16) following 'false' branch...
           | 1376 |             return;
           | 1377 |           base += written;
           |      |           ~~~~
           |      |           |
           |      |           (13) ...to here
           |      |           (17) ...to here
           | 1378 |           left -= written;
           | 1379 |           process_signals ();
           |      |           ~~~~~~~~~~~~~~~~~~
           |      |           |
           |      |           (18) calling 'process_signals' from 
'output_1_line'
           |
           +--> 'process_signals': events 19-20
                  |
                  |  260 | process_signals (void)
                  |      | ^~~~~~~~~~~~~~~
                  |      | |
                  |      | (19) entry to 'process_signals'
                  |......
                  |  264 |       set_color_context (RESET_CONTEXT);
                  |      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                  |      |       |
                  |      |       (20) calling 'set_color_context' from 
'process_signals'
                  |
                  +--> 'set_color_context': events 21-23
                         |
                         | 1449 | set_color_context (enum color_context 
color_context)
                         |      | ^~~~~~~~~~~~~~~~~
                         |      | |
                         |      | (21) entry to 'set_color_context'
                         | 1450 | {
                         | 1451 |   if (color_context != RESET_CONTEXT)
                         |      |      ~
                         |      |      |
                         |      |      (22) following 'false' branch (when 
'color_context == 3')...
                         | 1452 |     process_signals ();
                         | 1453 |   if (colors_enabled && last_context != 
color_context)
                         |      |   ~~
                         |      |   |
                         |      |   (23) ...to here
                         |
                  <------+
                  |
                'process_signals': events 24-25
                  |
                  |  264 |       set_color_context (RESET_CONTEXT);
                  |      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                  |      |       |
                  |      |       (24) returning to 'process_signals' from 
'set_color_context'
                  |......
                  |  268 |       xsigprocmask (SIG_BLOCK, &caught_signals, 
&oldset);
                  |      |       
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                  |      |       |
                  |      |       (25) calling 'xsigprocmask' from 
'process_signals'
                  |
                  +--> 'xsigprocmask': events 26-28
                         |
                         |  212 | xsigprocmask (int how, sigset_t const 
*restrict set, sigset_t *restrict oset)
                         |      | ^~~~~~~~~~~~
                         |      | |
                         |      | (26) entry to 'xsigprocmask'
                         |  213 | {
                         |  214 |   if (sigprocmask (how, set, oset) != 0)
                         |      |      ~
                         |      |      |
                         |      |      (27) following 'false' branch...
                         |  215 |     pfatal_with_name ("sigprocmask");
                         |  216 | }
                         |      | ~
                         |      | |
                         |      | (28) ...to here
                         |
                  <------+
                  |
                'process_signals': events 29-30
                  |
                  |  268 |       xsigprocmask (SIG_BLOCK, &caught_signals, 
&oldset);
                  |      |       
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                  |      |       |
                  |      |       (29) returning to 'process_signals' from 
'xsigprocmask'
                  |......
                  |  285 |           xsignal (sig, SIG_DFL);
                  |      |           ~~~~~~~~~~~~~~~~~~~~~~
                  |      |           |
                  |      |           (30) calling 'xsignal' from 
'process_signals'
                  |
                  +--> 'xsignal': events 31-32
                         |
                         |  203 | xsignal (int sig, signal_handler func)
                         |      | ^~~~~~~
                         |      | |
                         |      | (31) entry to 'xsignal'
                         |......
                         |  207 |     pfatal_with_name ("signal");
                         |      |     ~~~~~~~~~~~~~~~~~~~~~~~~~~~
                         |      |     |
                         |      |     (32) calling 'pfatal_with_name' from 
'xsignal'
                         |
                         +--> 'pfatal_with_name': events 33-34
                                |
                                |   87 | pfatal_with_name (char const *name)
                                |      | ^~~~~~~~~~~~~~~~
                                |      | |
                                |      | (33) entry to 'pfatal_with_name'
                                |......
                                |   90 |   print_message_queue ();
                                |      |   ~~~~~~~~~~~~~~~~~~~~~~
                                |      |   |
                                |      |   (34) calling 'print_message_queue' 
from 'pfatal_with_name'
                                |
                                +--> 'print_message_queue': events 35-43
                                       |
                                       |  159 | print_message_queue (void)
                                       |      | ^~~~~~~~~~~~~~~~~~~
                                       |      | |
                                       |      | (35) entry to 
'print_message_queue'
                                       |  160 | {
                                       |  161 |   for (struct msg *m = 
msg_chain; m; )
                                       |      |                                 
  ~
                                       |      |                                 
  |
                                       |      |                                 
  (37) following 'true' branch (when 'm' is non-NULL)...
                                       |......
                                       |  164 |       char const *p = m->args;
                                       |      |       ~~~~
                                       |      |       |
                                       |      |       (38) ...to here
                                       |  165 |       char const *plim = p + 
m->argbytes;
                                       |  166 |       char const *arg[4];
                                       |      |                   ~~~
                                       |      |                   |
                                       |      |                   (36) region 
created on stack here
                                       |  167 |       for (int i = 0; i < 4; 
i++)
                                       |      |                       ~~~~~
                                       |      |                         |
                                       |      |                         (39) 
following 'true' branch (when 'i != 4')...
                                       |      |                         (41) 
following 'false' branch (when 'i == 4')...
                                       |  168 |         {
                                       |  169 |           arg[i] = p;
                                       |      |           ~~~
                                       |      |           |
                                       |      |           (40) ...to here
                                       |......
                                       |  173 |       printf (_(m->msgid), 
arg[0], arg[1], arg[2], arg[3]);
                                       |      |       
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                       |      |       |
                                       |      |       (42) ...to here
                                       |      |       (43) use of uninitialized 
value 'arg[1]' here
                                       |
util.c:173:7: error: use of uninitialized value 'arg[3]' [CWE-457] 
[-Werror=analyzer-use-of-uninitialized-value]
  173 |       printf (_(m->msgid), arg[0], arg[1], arg[2], arg[3]);
      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  'print_1_line_nl': events 1-6
    |
    | 1320 | print_1_line_nl (char const *line_flag, char const *const *line, 
bool skip_nl)
    |      | ^~~~~~~~~~~~~~~
    |      | |
    |      | (1) entry to 'print_1_line_nl'
    |......
    | 1331 |   if (line_flag && *line_flag)
    |      |      ~~~~~~~~~~~~~~~~~~~~~~~~
    |      |      |          |  |
    |      |      |          |  (3) ...to here
    |      |      |          (4) following 'false' branch...
    |      |      (2) following 'true' branch (when 'line_flag' is non-NULL)...
    |......
    | 1349 |   output_1_line (base, limit - (skip_nl && limit[-1] == '\n'), 
flag_format, line_flag);
    |      |   
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    |      |   |
    |      |   (5) ...to here
    |      |   (6) calling 'output_1_line' from 'print_1_line_nl'
    |
    +--> 'output_1_line': events 7-18
           |
           | 1364 | output_1_line (char const *base, char const *limit, char 
const *flag_format,
           |      | ^~~~~~~~~~~~~
           |      | |
           |      | (7) entry to 'output_1_line'
           |......
           | 1368 |   if (!expand_tabs)
           |      |      ~
           |      |      |
           |      |      (8) following 'false' branch...
           | 1369 |     {
           | 1370 |       size_t left = limit - base;
           |      |       ~~~~~~
           |      |       |
           |      |       (9) ...to here
           | 1371 |       while (left)
           |      |              ~~~~
           |      |              |
           |      |              (10) following 'true' branch (when 'left != 
0')...
           |      |              (14) following 'true' branch (when 'left != 
0')...
           | 1372 |         {
           | 1373 |           size_t to_write = MIN (left, MAX_CHUNK);
           |      |           ~~~~~~
           |      |           |
           |      |           (11) ...to here
           |      |           (15) ...to here
           | 1374 |           size_t written = fwrite (base, sizeof (char), 
to_write, outfile);
           | 1375 |           if (written < to_write)
           |      |              ~
           |      |              |
           |      |              (12) following 'false' branch...
           |      |              (16) following 'false' branch...
           | 1376 |             return;
           | 1377 |           base += written;
           |      |           ~~~~
           |      |           |
           |      |           (13) ...to here
           |      |           (17) ...to here
           | 1378 |           left -= written;
           | 1379 |           process_signals ();
           |      |           ~~~~~~~~~~~~~~~~~~
           |      |           |
           |      |           (18) calling 'process_signals' from 
'output_1_line'
           |
           +--> 'process_signals': events 19-20
                  |
                  |  260 | process_signals (void)
                  |      | ^~~~~~~~~~~~~~~
                  |      | |
                  |      | (19) entry to 'process_signals'
                  |......
                  |  264 |       set_color_context (RESET_CONTEXT);
                  |      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                  |      |       |
                  |      |       (20) calling 'set_color_context' from 
'process_signals'
                  |
                  +--> 'set_color_context': events 21-23
                         |
                         | 1449 | set_color_context (enum color_context 
color_context)
                         |      | ^~~~~~~~~~~~~~~~~
                         |      | |
                         |      | (21) entry to 'set_color_context'
                         | 1450 | {
                         | 1451 |   if (color_context != RESET_CONTEXT)
                         |      |      ~
                         |      |      |
                         |      |      (22) following 'false' branch (when 
'color_context == 3')...
                         | 1452 |     process_signals ();
                         | 1453 |   if (colors_enabled && last_context != 
color_context)
                         |      |   ~~
                         |      |   |
                         |      |   (23) ...to here
                         |
                  <------+
                  |
                'process_signals': events 24-25
                  |
                  |  264 |       set_color_context (RESET_CONTEXT);
                  |      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                  |      |       |
                  |      |       (24) returning to 'process_signals' from 
'set_color_context'
                  |......
                  |  268 |       xsigprocmask (SIG_BLOCK, &caught_signals, 
&oldset);
                  |      |       
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                  |      |       |
                  |      |       (25) calling 'xsigprocmask' from 
'process_signals'
                  |
                  +--> 'xsigprocmask': events 26-28
                         |
                         |  212 | xsigprocmask (int how, sigset_t const 
*restrict set, sigset_t *restrict oset)
                         |      | ^~~~~~~~~~~~
                         |      | |
                         |      | (26) entry to 'xsigprocmask'
                         |  213 | {
                         |  214 |   if (sigprocmask (how, set, oset) != 0)
                         |      |      ~
                         |      |      |
                         |      |      (27) following 'false' branch...
                         |  215 |     pfatal_with_name ("sigprocmask");
                         |  216 | }
                         |      | ~
                         |      | |
                         |      | (28) ...to here
                         |
                  <------+
                  |
                'process_signals': events 29-30
                  |
                  |  268 |       xsigprocmask (SIG_BLOCK, &caught_signals, 
&oldset);
                  |      |       
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                  |      |       |
                  |      |       (29) returning to 'process_signals' from 
'xsigprocmask'
                  |......
                  |  285 |           xsignal (sig, SIG_DFL);
                  |      |           ~~~~~~~~~~~~~~~~~~~~~~
                  |      |           |
                  |      |           (30) calling 'xsignal' from 
'process_signals'
                  |
                  +--> 'xsignal': events 31-32
                         |
                         |  203 | xsignal (int sig, signal_handler func)
                         |      | ^~~~~~~
                         |      | |
                         |      | (31) entry to 'xsignal'
                         |......
                         |  207 |     pfatal_with_name ("signal");
                         |      |     ~~~~~~~~~~~~~~~~~~~~~~~~~~~
                         |      |     |
                         |      |     (32) calling 'pfatal_with_name' from 
'xsignal'
                         |
                         +--> 'pfatal_with_name': events 33-34
                                |
                                |   87 | pfatal_with_name (char const *name)
                                |      | ^~~~~~~~~~~~~~~~
                                |      | |
                                |      | (33) entry to 'pfatal_with_name'
                                |......
                                |   90 |   print_message_queue ();
                                |      |   ~~~~~~~~~~~~~~~~~~~~~~
                                |      |   |
                                |      |   (34) calling 'print_message_queue' 
from 'pfatal_with_name'
                                |
                                +--> 'print_message_queue': events 35-43
                                       |
                                       |  159 | print_message_queue (void)
                                       |      | ^~~~~~~~~~~~~~~~~~~
                                       |      | |
                                       |      | (35) entry to 
'print_message_queue'
                                       |  160 | {
                                       |  161 |   for (struct msg *m = 
msg_chain; m; )
                                       |      |                                 
  ~
                                       |      |                                 
  |
                                       |      |                                 
  (37) following 'true' branch (when 'm' is non-NULL)...
                                       |......
                                       |  164 |       char const *p = m->args;
                                       |      |       ~~~~
                                       |      |       |
                                       |      |       (38) ...to here
                                       |  165 |       char const *plim = p + 
m->argbytes;
                                       |  166 |       char const *arg[4];
                                       |      |                   ~~~
                                       |      |                   |
                                       |      |                   (36) region 
created on stack here
                                       |  167 |       for (int i = 0; i < 4; 
i++)
                                       |      |                       ~~~~~
                                       |      |                         |
                                       |      |                         (39) 
following 'true' branch (when 'i != 4')...
                                       |      |                         (41) 
following 'false' branch (when 'i == 4')...
                                       |  168 |         {
                                       |  169 |           arg[i] = p;
                                       |      |           ~~~
                                       |      |           |
                                       |      |           (40) ...to here
                                       |......
                                       |  173 |       printf (_(m->msgid), 
arg[0], arg[1], arg[2], arg[3]);
                                       |      |       
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                       |      |       |
                                       |      |       (42) ...to here
                                       |      |       (43) use of uninitialized 
value 'arg[3]' here
                                       |
cc1: all warnings being treated as errors
make[2]: *** [Makefile:1776: util.o] Error 1

reply via email to

[Prev in Thread] Current Thread [Next in Thread]