gcc/analyzer/ChangeLog:
PR analyzer/116865
* region-model-manager.cc
(region_model_manager::get_offset_region): Use POINTER_PLUS_EXPR
rather than PLUS_EXPR for pointer offsets.
gcc/testsuite/ChangeLog:
PR analyzer/116865
* c-c++-common/analyzer/ice-pr116865.c: New test.
Signed-off-by: David Malcolm <dmalcolm@redhat.com>
const svalue *sval_x = parent_offset_reg->get_byte_offset ();
const svalue *sval_sum
= get_or_create_binop (byte_offset->get_type (),
- PLUS_EXPR, sval_x, byte_offset);
+ POINTER_PLUS_EXPR, sval_x, byte_offset);
return get_offset_region (parent->get_parent_region (), type, sval_sum);
}
--- /dev/null
+/* { dg-additional-options "-O2" } */
+
+int f(int l) {
+ char *t_string = (char *)__builtin_calloc(l + 2, 1);
+ char *end = t_string + l - 1;
+ return '0' != *(end - 1); /* { dg-warning "leak of 't_string'" } */
+}