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