]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
analyzer: add more properties to sarif output
authorDavid Malcolm <dmalcolm@redhat.com>
Tue, 18 Feb 2025 21:54:57 +0000 (16:54 -0500)
committerDavid Malcolm <dmalcolm@redhat.com>
Tue, 18 Feb 2025 21:54:57 +0000 (16:54 -0500)
Add some more properties to the analyzer's sarif output, to
help with debugging -fanalyzer.

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 <dmalcolm@redhat.com>
gcc/analyzer/diagnostic-manager.cc
gcc/analyzer/region-model.cc

index 8db6a533e604773f3f6d5dc578649cf1ca8a8c47..4bf1dce967de43eeaee986c4b4a10b9f907131b3 100644 (file)
@@ -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.  */
index 78b086900b483427f52846bcc83aa5d3efbae06a..79378a9e6e5f6e082799ddc788499f4e57be2c56 100644 (file)
@@ -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;