diff --git a/gcc/analyzer/store.cc b/gcc/analyzer/store.cc index 5fef27c8bd2..950a7784542 100644 --- a/gcc/analyzer/store.cc +++ b/gcc/analyzer/store.cc @@ -1691,6 +1691,9 @@ store::mark_as_escaped (const region *base_reg) gcc_assert (base_reg); gcc_assert (base_reg->get_base_region () == base_reg); + if (base_reg->symbolic_for_unknown_ptr_p ()) + return; + binding_cluster *cluster = get_or_create_cluster (base_reg); cluster->mark_as_escaped (); } diff --git a/gcc/testsuite/gcc.dg/analyzer/pr96611.c b/gcc/testsuite/gcc.dg/analyzer/pr96611.c new file mode 100644 index 00000000000..4f7502361cb --- /dev/null +++ b/gcc/testsuite/gcc.dg/analyzer/pr96611.c @@ -0,0 +1,14 @@ +struct s { int a; } *ptr; +void unknown_int_ptr (int *); +void unknown_void (void); + +void test_1 () +{ + unknown_int_ptr (&ptr->a); +} + +void test_2 () +{ + unknown_void (); + unknown_int_ptr (&ptr->a); +}