diff options
author | David Malcolm <dmalcolm@redhat.com> | 2020-08-17 12:30:56 -0400 |
---|---|---|
committer | David Malcolm <dmalcolm@redhat.com> | 2020-08-17 14:47:18 -0400 |
commit | b00a83047574eb6f8d1e670ad439609125873506 (patch) | |
tree | 139ebeb1d4205f02ee52980028c35c6c5fa71ca9 | |
parent | 42c5ae5d7f0ad89b75d93c497fe44b6c66da7e76 (diff) | |
download | gcc-b00a83047574eb6f8d1e670ad439609125873506.zip gcc-b00a83047574eb6f8d1e670ad439609125873506.tar.gz gcc-b00a83047574eb6f8d1e670ad439609125873506.tar.bz2 |
analyzer: fix ICE on NULL dereference [PR96644]
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.
-rw-r--r-- | gcc/analyzer/region-model-manager.cc | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/analyzer/pr96644.c | 24 |
2 files changed, 26 insertions, 2 deletions
diff --git a/gcc/analyzer/region-model-manager.cc b/gcc/analyzer/region-model-manager.cc index 9c7b060..4faeaa5 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 0000000..3953c8d --- /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); + } +} |