diff mbox series

[committed] analyzer: fix ICE on NULL dereference [PR96644]

Message ID 20200817185627.12200-1-dmalcolm@redhat.com
State New
Headers show
Series [committed] analyzer: fix ICE on NULL dereference [PR96644] | expand

Commit Message

David Malcolm Aug. 17, 2020, 6:56 p.m. UTC
Successfully bootstrapped & regrtested on x86_64-pc-linux-gnu.

Pushed to master as r11-2725-gb00a83047574eb6f8d1e670ad439609125873506.

gcc/analyzer/ChangeLog:
	PR analyzer/96644
	* region-model-manager.cc (get_region_for_unexpected_tree_code):
	Handle ctxt being NULL.

gcc/testsuite/ChangeLog:
	PR analyzer/96644
	* gcc.dg/analyzer/pr96644.c: New test.
---
 gcc/analyzer/region-model-manager.cc    |  4 ++--
 gcc/testsuite/gcc.dg/analyzer/pr96644.c | 24 ++++++++++++++++++++++++
 2 files changed, 26 insertions(+), 2 deletions(-)
 create mode 100644 gcc/testsuite/gcc.dg/analyzer/pr96644.c
diff mbox series

Patch

diff --git a/gcc/analyzer/region-model-manager.cc b/gcc/analyzer/region-model-manager.cc
index 9c7b0602e88..4faeaa52a63 100644
--- a/gcc/analyzer/region-model-manager.cc
+++ b/gcc/analyzer/region-model-manager.cc
@@ -927,11 +927,11 @@  get_region_for_unexpected_tree_code (region_model_context *ctxt,
 				     tree t,
 				     const dump_location_t &loc)
 {
-  gcc_assert (ctxt);
   tree type = TYPE_P (t) ? t : TREE_TYPE (t);
   region *new_reg
     = new unknown_region (alloc_region_id (), &m_root_region, type);
-  ctxt->on_unexpected_tree_code (t, loc);
+  if (ctxt)
+    ctxt->on_unexpected_tree_code (t, loc);
   return new_reg;
 }
 
diff --git a/gcc/testsuite/gcc.dg/analyzer/pr96644.c b/gcc/testsuite/gcc.dg/analyzer/pr96644.c
new file mode 100644
index 00000000000..3953c8d58c4
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/analyzer/pr96644.c
@@ -0,0 +1,24 @@ 
+/* { dg-additional-options "-O1" } */
+
+int oh[1];
+int *x3;
+
+int *
+cm (char *m0)
+{
+  return oh;
+}
+
+void
+ek (void)
+{
+  for (;;)
+    {
+      char *b2 = 0;
+
+      if (*b2 != 0) /* { dg-warning "dereference of NULL" } */
+	++b2;
+
+      x3 = cm (b2);
+    }
+}