From: David Malcolm Date: Wed, 10 Apr 2024 20:43:29 +0000 (-0400) Subject: analyzer: add SARIF property bag to -Wanalyzer-infinite-loop X-Git-Tag: basepoints/gcc-15~238 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=107b0e63be023c11017aa53625a6557950df4d99;p=thirdparty%2Fgcc.git analyzer: add SARIF property bag to -Wanalyzer-infinite-loop gcc/analyzer/ChangeLog: * infinite-loop.cc: Include "diagnostic-format-sarif.h". (infinite_loop::to_json): New. (infinite_loop_diagnostic::maybe_add_sarif_properties): New. Signed-off-by: David Malcolm --- diff --git a/gcc/analyzer/infinite-loop.cc b/gcc/analyzer/infinite-loop.cc index 296489b1146d..e277a8384a04 100644 --- a/gcc/analyzer/infinite-loop.cc +++ b/gcc/analyzer/infinite-loop.cc @@ -63,6 +63,7 @@ along with GCC; see the file COPYING3. If not see #include "analyzer/checker-path.h" #include "analyzer/feasible-graph.h" #include "make-unique.h" +#include "diagnostic-format-sarif.h" /* A bundle of data characterizing a particular infinite loop identified within the exploded graph. */ @@ -105,6 +106,18 @@ struct infinite_loop && m_loc == other.m_loc); } + json::object * + to_json () const + { + json::object *loop_obj = new json::object (); + loop_obj->set_integer ("enode", m_enode.m_index); + json::array *edge_arr = new json::array (); + for (auto eedge : m_eedge_vec) + edge_arr->append (eedge->to_json ()); + loop_obj->set ("eedges", edge_arr); + return loop_obj; + } + const exploded_node &m_enode; location_t m_loc; std::vector m_eedge_vec; @@ -297,6 +310,15 @@ public: } } + 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/infinite_loop_diagnostic/" + props.set (PROPERTY_PREFIX "inf_loop", m_inf_loop->to_json ()); +#undef PROPERTY_PREFIX + } + private: std::unique_ptr m_inf_loop; };