Add some more properties to the analyzer's sarif output, to
help with debugging -fanalyzer.

Successfully bootstrapped & regrtested on x86_64-pc-linux-gnu.
Successful run of analyzer integration tests on x86_64-pc-linux-gnu.
Pushed to trunk as r15-7611-gfcdcccdbf809f9.

gcc/analyzer/ChangeLog:
        * diagnostic-manager.cc
        (saved_diagnostic::maybe_add_sarif_properties): Add various
        properties for debugging, for m_stmt, m_var, and m_duplicates.
        Remove stray 'if' statement.  Capture the kind of the
        pending_diagnostic.
        * region-model.cc
        (poisoned_value_diagnostic::maybe_add_sarif_properties): New.

Signed-off-by: David Malcolm <dmalc...@redhat.com>
---
 gcc/analyzer/diagnostic-manager.cc | 26 +++++++++++++++++++++++++-
 gcc/analyzer/region-model.cc       | 13 +++++++++++++
 2 files changed, 38 insertions(+), 1 deletion(-)

diff --git a/gcc/analyzer/diagnostic-manager.cc 
b/gcc/analyzer/diagnostic-manager.cc
index 8db6a533e604..4bf1dce967de 100644
--- a/gcc/analyzer/diagnostic-manager.cc
+++ b/gcc/analyzer/diagnostic-manager.cc
@@ -1032,12 +1032,36 @@ saved_diagnostic::maybe_add_sarif_properties 
(sarif_object &result_obj) const
     props.set_string (PROPERTY_PREFIX "sm", m_sm->get_name ());
   props.set_integer (PROPERTY_PREFIX "enode", m_enode->m_index);
   props.set_integer (PROPERTY_PREFIX "snode", m_snode->m_index);
+  if (m_stmt)
+    {
+      pretty_printer pp;
+      pp_gimple_stmt_1 (&pp, m_stmt, 0, (dump_flags_t)0);
+      props.set_string (PROPERTY_PREFIX "stmt", pp_formatted_text (&pp));
+    }
+  if (m_var)
+    props.set (PROPERTY_PREFIX "var", tree_to_json (m_var));
   if (m_sval)
     props.set (PROPERTY_PREFIX "sval", m_sval->to_json ());
   if (m_state)
     props.set (PROPERTY_PREFIX "state", m_state->to_json ());
-  if (m_best_epath)
+  // TODO: m_best_epath
   props.set_integer (PROPERTY_PREFIX "idx", m_idx);
+  if (m_duplicates.length () > 0)
+    {
+      auto duplicates_arr = ::make_unique<json::array> ();
+      for (auto iter : m_duplicates)
+       {
+         auto sd_obj = ::make_unique<sarif_object> ();
+         iter->maybe_add_sarif_properties (*sd_obj);
+         duplicates_arr->append (std::move (sd_obj));
+       }
+      props.set<json::array> (PROPERTY_PREFIX "duplicates",
+                             std::move (duplicates_arr));
+    }
+#undef PROPERTY_PREFIX
+
+#define PROPERTY_PREFIX "gcc/analyzer/pending_diagnostic/"
+  props.set_string (PROPERTY_PREFIX "kind", m_d->get_kind ());
 #undef PROPERTY_PREFIX
 
   /* Potentially add pending_diagnostic-specific properties.  */
diff --git a/gcc/analyzer/region-model.cc b/gcc/analyzer/region-model.cc
index 78b086900b48..79378a9e6e5f 100644
--- a/gcc/analyzer/region-model.cc
+++ b/gcc/analyzer/region-model.cc
@@ -753,6 +753,19 @@ public:
     return true;
   }
 
+  void
+  maybe_add_sarif_properties (sarif_object &result_obj) const final override
+  {
+    sarif_property_bag &props = result_obj.get_or_create_properties ();
+#define PROPERTY_PREFIX "gcc/analyzer/poisoned_value_diagnostic/"
+    props.set (PROPERTY_PREFIX "expr", tree_to_json (m_expr));
+    props.set_string (PROPERTY_PREFIX "kind", poison_kind_to_str (m_pkind));
+    if (m_src_region)
+      props.set (PROPERTY_PREFIX "src_region", m_src_region->to_json ());
+    props.set (PROPERTY_PREFIX "check_expr", tree_to_json (m_check_expr));
+#undef PROPERTY_PREFIX
+  }
+
 private:
   tree m_expr;
   enum poison_kind m_pkind;
-- 
2.26.3

Reply via email to