[pushed] analyzer: add SARIF property bag to -Wanalyzer-allocation-size

Message ID 20240130133119.1875785-1-dmalcolm@redhat.com
State Committed
Commit 181f753dc4afa9866d6125904cf050d5eb437a86
Headers
Series [pushed] analyzer: add SARIF property bag to -Wanalyzer-allocation-size |

Checks

Context Check Description
linaro-tcwg-bot/tcwg_gcc_build--master-arm warning Patch is already merged
linaro-tcwg-bot/tcwg_gcc_build--master-aarch64 warning Patch is already merged

Commit Message

David Malcolm Jan. 30, 2024, 1:31 p.m. UTC
  This is useful for debugging the analyzer.

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 r14-8626-g181f753dc4afa9.

gcc/analyzer/ChangeLog:
	* region-model.cc
	(dubious_allocation_size::dubious_allocation_size): Add
	"capacity_sval" param.  Drop unused ctor.
	(dubious_allocation_size::maybe_add_sarif_properties): New.
	(dubious_allocation_size::m_capacity_sval): New field.
	(region_model::check_region_size): Pass capacity svalue to
	dubious_allocation_size ctor.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
---
 gcc/analyzer/region-model.cc | 31 +++++++++++++++++++++----------
 1 file changed, 21 insertions(+), 10 deletions(-)
  

Patch

diff --git a/gcc/analyzer/region-model.cc b/gcc/analyzer/region-model.cc
index dbb2149dbd46..ba82f46c1887 100644
--- a/gcc/analyzer/region-model.cc
+++ b/gcc/analyzer/region-model.cc
@@ -3113,16 +3113,15 @@  class dubious_allocation_size
 {
 public:
   dubious_allocation_size (const region *lhs, const region *rhs,
+			   const svalue *capacity_sval, tree expr,
 			   const gimple *stmt)
-  : m_lhs (lhs), m_rhs (rhs), m_expr (NULL_TREE), m_stmt (stmt),
+  : m_lhs (lhs), m_rhs (rhs),
+    m_capacity_sval (capacity_sval), m_expr (expr),
+    m_stmt (stmt),
     m_has_allocation_event (false)
-  {}
-
-  dubious_allocation_size (const region *lhs, const region *rhs,
-			   tree expr, const gimple *stmt)
-  : m_lhs (lhs), m_rhs (rhs), m_expr (expr), m_stmt (stmt),
-    m_has_allocation_event (false)
-  {}
+  {
+    gcc_assert (m_capacity_sval);
+  }
 
   const char *get_kind () const final override
   {
@@ -3196,9 +3195,21 @@  public:
     interest->add_region_creation (m_rhs);
   }
 
+  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/dubious_allocation_size/"
+    props.set (PROPERTY_PREFIX "lhs", m_lhs->to_json ());
+    props.set (PROPERTY_PREFIX "rhs", m_rhs->to_json ());
+    props.set (PROPERTY_PREFIX "capacity_sval", m_capacity_sval->to_json ());
+#undef PROPERTY_PREFIX
+  }
+
 private:
   const region *m_lhs;
   const region *m_rhs;
+  const svalue *m_capacity_sval;
   const tree m_expr;
   const gimple *m_stmt;
   bool m_has_allocation_event;
@@ -3437,7 +3448,7 @@  region_model::check_region_size (const region *lhs_reg, const svalue *rhs_sval,
 	    && !capacity_compatible_with_type (cst_cap, pointee_size_tree,
 					       is_struct))
 	  ctxt->warn (make_unique <dubious_allocation_size> (lhs_reg, rhs_reg,
-							     cst_cap,
+							     capacity, cst_cap,
 							     ctxt->get_stmt ()));
       }
       break;
@@ -3451,7 +3462,7 @@  region_model::check_region_size (const region *lhs_reg, const svalue *rhs_sval,
 		tree expr = get_representative_tree (capacity);
 		ctxt->warn (make_unique <dubious_allocation_size> (lhs_reg,
 								   rhs_reg,
-								   expr,
+								   capacity, expr,
 								   ctxt->get_stmt ()));
 	      }
 	  }