https://gcc.gnu.org/g:26a69f98a06d53087794fa29b029c1767c004ba5

commit r16-6930-g26a69f98a06d53087794fa29b029c1767c004ba5
Author: David Malcolm <[email protected]>
Date:   Tue Jan 20 12:06:11 2026 -0500

    analyzer: fix -Wmaybe-uninitialized of 'edge_sense'
    
    gcc/analyzer/ChangeLog:
            * checker-event.cc (cfg_edge_event::maybe_get_edge_sense): New.
            * checker-event.h (cfg_edge_event::maybe_get_edge_sense): New decl.
            * diagnostic-manager.cc
            (diagnostic_manager::consolidate_conditions): Use the above to
            ensure that edge_sense is initialized if used, and to simplify
            the check for a run of conditions.
    
    Signed-off-by: David Malcolm <[email protected]>

Diff:
---
 gcc/analyzer/checker-event.cc      | 23 +++++++++++++++++++++++
 gcc/analyzer/checker-event.h       |  2 ++
 gcc/analyzer/diagnostic-manager.cc | 27 ++++++---------------------
 3 files changed, 31 insertions(+), 21 deletions(-)

diff --git a/gcc/analyzer/checker-event.cc b/gcc/analyzer/checker-event.cc
index 97ba59ca9188..d1e9b4429f9d 100644
--- a/gcc/analyzer/checker-event.cc
+++ b/gcc/analyzer/checker-event.cc
@@ -632,6 +632,29 @@ cfg_edge_event::get_cfg_edge () const
   return m_sedge->get_any_cfg_edge ();
 }
 
+/* If this event is for a conditional, write the sense of the
+   conditional to *OUT and return true.
+   Otherwise return false.  */
+
+bool
+cfg_edge_event::maybe_get_edge_sense (bool *out) const
+{
+  if (::edge e = get_cfg_edge ())
+    {
+      if (e->flags & EDGE_TRUE_VALUE)
+       {
+         *out = true;
+         return true;
+       }
+      else if (e->flags & EDGE_FALSE_VALUE)
+       {
+         *out = false;
+         return true;
+       }
+    }
+  return false;
+}
+
 /* class start_cfg_edge_event : public cfg_edge_event.  */
 
 /* Implementation of diagnostics::paths::event::print_desc vfunc for
diff --git a/gcc/analyzer/checker-event.h b/gcc/analyzer/checker-event.h
index 8094ef607c17..be39a89a7b17 100644
--- a/gcc/analyzer/checker-event.h
+++ b/gcc/analyzer/checker-event.h
@@ -456,6 +456,8 @@ public:
 
   ::edge get_cfg_edge () const;
 
+  bool maybe_get_edge_sense (bool *out) const;
+
  protected:
   cfg_edge_event (enum event_kind kind,
                  const exploded_edge &eedge,
diff --git a/gcc/analyzer/diagnostic-manager.cc 
b/gcc/analyzer/diagnostic-manager.cc
index 813f764eb327..8e3aed064200 100644
--- a/gcc/analyzer/diagnostic-manager.cc
+++ b/gcc/analyzer/diagnostic-manager.cc
@@ -2708,15 +2708,8 @@ diagnostic_manager::consolidate_conditions (checker_path 
*path) const
          const start_cfg_edge_event *old_start_cfg_ev
            = (const start_cfg_edge_event *)old_start_ev;
          bool edge_sense;
-         if (::edge e = old_start_cfg_ev->get_cfg_edge ())
-           {
-             if (e->flags & EDGE_TRUE_VALUE)
-               edge_sense = true;
-             else if (e->flags & EDGE_FALSE_VALUE)
-               edge_sense = false;
-             else
-               continue;
-           }
+         if (!old_start_cfg_ev->maybe_get_edge_sense (&edge_sense))
+           continue;
 
          /* Find a run of CFG start/end event pairs from
               [start_idx, next_idx)
@@ -2731,19 +2724,11 @@ diagnostic_manager::consolidate_conditions 
(checker_path *path) const
              gcc_assert (iter_ev->get_kind () == event_kind::start_cfg_edge);
              const start_cfg_edge_event *iter_cfg_ev
                = (const start_cfg_edge_event *)iter_ev;
-             ::edge e = iter_cfg_ev->get_cfg_edge ();
-             if (!e)
+             bool iter_edge_sense;
+             if (!iter_cfg_ev->maybe_get_edge_sense (&iter_edge_sense))
+               break;
+             if (iter_edge_sense != edge_sense)
                break;
-             if (edge_sense)
-               {
-                 if (!(e->flags & EDGE_TRUE_VALUE))
-                   break;
-               }
-             else
-               {
-                 if (!(e->flags & EDGE_FALSE_VALUE))
-                   break;
-               }
              next_idx += 2;
            }

Reply via email to