From ee46eaa79e913eaf715c0e2ca9d12daa3bddcc06 Mon Sep 17 00:00:00 2001 From: David Malcolm Date: Wed, 1 Apr 2026 18:30:41 -0400 Subject: [PATCH 35/98] FIXME: add debug description --- gcc/analyzer/common.h | 8 ++++++++ gcc/analyzer/diagnostic-manager.cc | 19 +++++++++++++++++-- gcc/analyzer/exploded-path.cc | 7 ++++++- gcc/analyzer/pending-diagnostic.cc | 9 +++++---- gcc/analyzer/pending-diagnostic.h | 4 ++-- gcc/analyzer/region-model.cc | 2 +- 6 files changed, 39 insertions(+), 10 deletions(-) diff --git a/gcc/analyzer/common.h b/gcc/analyzer/common.h index b20adb26fe77..b64dd828ed2a 100644 --- a/gcc/analyzer/common.h +++ b/gcc/analyzer/common.h @@ -385,6 +385,13 @@ struct eedge_annotation { } + eedge_annotation (std::string debug_desc, + const region *region_holding_value) + : m_debug_desc (std::move (debug_desc)), + m_region_holding_value (region_holding_value) + { + } + void dump_to_pp (pretty_printer *) const; void dump () const; @@ -399,6 +406,7 @@ struct eedge_annotation return !(*this == other); } + std::string m_debug_desc; // FIXME const region *m_region_holding_value; }; diff --git a/gcc/analyzer/diagnostic-manager.cc b/gcc/analyzer/diagnostic-manager.cc index d50d656b687c..6c06f140f456 100644 --- a/gcc/analyzer/diagnostic-manager.cc +++ b/gcc/analyzer/diagnostic-manager.cc @@ -1660,8 +1660,9 @@ diagnostic_manager::annotate_exploded_path (const path_builder &pb, eedge_annotation curr_annotation; - if (interest.m_read_regions.length () > 0) - curr_annotation.m_region_holding_value = interest.m_read_regions[0]; + // FIXME: + if (interest.m_read_regions.size () > 0) + curr_annotation = interest.m_read_regions[0]; // Walk epath backwards, propagating annotation information for (int idx = epath.m_elements.size () - 1; idx >= 0; --idx) @@ -1685,6 +1686,13 @@ diagnostic_manager::annotate_exploded_path (const path_builder &pb, rewind_context ctxt (*eedge, logger, curr_annotation); if (eedge->m_custom_info) { + if (logger) + { + logger->start_log_line (); + logger->log_partial ("custom_edge_info: "); + eedge->m_custom_info->print (logger->get_printer ()); + logger->end_log_line (); + } if (!eedge->m_custom_info->try_to_rewind_data_flow (ctxt)) { if (logger) @@ -1694,6 +1702,13 @@ diagnostic_manager::annotate_exploded_path (const path_builder &pb, } else if (const operation *op = eedge->maybe_get_op ()) { + if (logger) + { + logger->start_log_line (); + logger->log_partial ("op: "); + op->print_as_edge_label (logger->get_printer (), false); + logger->end_log_line (); + } if (!op->try_to_rewind_data_flow (ctxt)) { if (logger) diff --git a/gcc/analyzer/exploded-path.cc b/gcc/analyzer/exploded-path.cc index 71c204d39225..f4992a919f77 100644 --- a/gcc/analyzer/exploded-path.cc +++ b/gcc/analyzer/exploded-path.cc @@ -31,8 +31,13 @@ namespace ana { void eedge_annotation::dump_to_pp (pretty_printer *pp) const { + pp_printf (pp, "%s: {", m_debug_desc.c_str ()); if (m_region_holding_value) - m_region_holding_value->dump_to_pp (pp, true); + { + pp_string (pp, "region holding value: "); + m_region_holding_value->dump_to_pp (pp, false); + } + pp_string (pp, "}"); } void diff --git a/gcc/analyzer/pending-diagnostic.cc b/gcc/analyzer/pending-diagnostic.cc index faf66aed70bc..39992e4de535 100644 --- a/gcc/analyzer/pending-diagnostic.cc +++ b/gcc/analyzer/pending-diagnostic.cc @@ -61,10 +61,10 @@ interesting_t::add_region_creation (const region *reg) // FIXME void -interesting_t::add_read_region (const region *reg) +interesting_t::add_read_region (const region *reg, std::string debug_desc) { gcc_assert (reg); - m_read_regions.safe_push (reg); + m_read_regions.push_back (eedge_annotation (std::move (debug_desc), reg)); } void @@ -80,11 +80,12 @@ interesting_t::dump_to_pp (pretty_printer *pp, bool simple) const reg->dump_to_pp (pp, simple); } pp_string (pp, "], read regions: ["); - FOR_EACH_VEC_ELT (m_read_regions, i, reg) + for (i = 0; i < m_read_regions.size (); ++i) { + auto &ann = m_read_regions[i]; if (i > 0) pp_string (pp, ", "); - reg->dump_to_pp (pp, simple); + ann.dump_to_pp (pp); } pp_string (pp, "]}"); } diff --git a/gcc/analyzer/pending-diagnostic.h b/gcc/analyzer/pending-diagnostic.h index cbed366af34b..37b598145b50 100644 --- a/gcc/analyzer/pending-diagnostic.h +++ b/gcc/analyzer/pending-diagnostic.h @@ -38,12 +38,12 @@ struct interesting_t { void add_region_creation (const region *reg); - void add_read_region (const region *reg); + void add_read_region (const region *reg, std::string debug_desc); void dump_to_pp (pretty_printer *pp, bool simple) const; auto_vec m_region_creation; - auto_vec m_read_regions; + std::vector m_read_regions; }; /* Various bundles of information used for generating more precise diff --git a/gcc/analyzer/region-model.cc b/gcc/analyzer/region-model.cc index 50738ab338fc..f6d59f15183e 100644 --- a/gcc/analyzer/region-model.cc +++ b/gcc/analyzer/region-model.cc @@ -896,7 +896,7 @@ public: void mark_interesting_stuff (interesting_t *interest) { - interest->add_read_region (m_divisor_reg); + interest->add_read_region (m_divisor_reg, "divisor zero value"); } private: -- 2.49.0