|
test_1
|
test_1: events 1-2
| 95 | | void test_1 (const char *str) |
| | | ^~~~~~ |
| | | | |
| | | (1) entry to ‘test_1’ |
| 96 | | { |
| 97 | | base_obj *obj = new_string_obj (str); |
| | | ~~~~~~~~~~~~~~~~~~~~ |
| | | | |
| | | (2) calling ‘new_string_obj’ from ‘test_1’ |
|
|
new_string_obj
|
new_string_obj: events 3-4
| 69 | | base_obj *new_string_obj (const char *str) |
| | | ^~~~~~~~~~~~~~ |
| | | | |
| | | (3) entry to ‘new_string_obj’ |
| [...] | |
| 75 | | = (string_obj *)alloc_obj (&str_type, sizeof (string_obj) + len + 1); |
| | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| | | | |
| | | (4) calling ‘alloc_obj’ from ‘new_string_obj’ |
|
|
alloc_obj
|
alloc_obj: events 5-9
| 59 | | base_obj *alloc_obj (type_obj *ob_type, size_t sz) |
| | | ^~~~~~~~~ |
| | | | |
| | | (5) entry to ‘alloc_obj’ |
| 60 | | { |
| 61 | | base_obj *obj = (base_obj *)malloc (sz); |
| | | ~~~~~~~~~~~ |
| | | | |
| | | (6) allocated here
|
| 62 | | if (!obj) |
| | | ~ |
| | | | |
| | | (7) assuming ‘obj’ is non-NULL
|
| | | (8) following ‘false’ branch (when ‘obj’ is non-NULL)... ─>─┐ |
| | | │ |
| | | │ |
| | ┌ | ─────────────────────────────────────────────────────────────────┘ |
| 63 | │ | return NULL; /* { dg-message "using NULL here" } */ |
| 64 | │ | obj->ob_type = ob_type; |
| | │ | ~~~~~~~~~~~~~~~~~~~~~~ |
| | │ | | |
| | └ | ──────────────>(9) ...to here |
|
|
|
new_string_obj: event 10
| 75 | | = (string_obj *)alloc_obj (&str_type, sizeof (string_obj) + len + 1); |
| | | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| | | | |
| | | (10) returning to ‘new_string_obj’ from ‘alloc_obj’ |
|
|
|
test_1: events 11-12
| 97 | | base_obj *obj = new_string_obj (str); |
| | | ^~~~~~~~~~~~~~~~~~~~ |
| | | | |
| | | (11) returning to ‘test_1’ from ‘new_string_obj’ |
| 98 | | unref (obj); |
| | | ~~~~~~~~~~~ |
| | | | |
| | | (12) calling ‘unref’ from ‘test_1’ |
|
|
unref
|
unref: events 13-15
| 89 | | void unref (base_obj *obj) |
| | | ^~~~~ |
| | | | |
| | | (13) entry to ‘unref’ |
| 90 | | { |
| 91 | | if (--obj->ob_refcnt == 0) /* { dg-bogus "dereference of uninitialized pointer 'obj'" } */ |
| | | ~ |
| | | | |
| | | (14) following ‘false’ branch... ─>─┐ |
| | | │ |
| | | │ |
| | ┌ | ─────────────────────────────────────────┘ |
| 92 | │ | obj->ob_type->tp_dealloc (obj); |
| 93 | │ | } |
| | │ | ~ |
| | │ | | |
| | └ | (15) ...to here |
|
|
|
test_1: events 16-17
| 98 | | unref (obj); |
| | | ^~~~~~~~~~~ |
| | | | |
| | | (16) returning to ‘test_1’ from ‘unref’ |
| 99 | | } /* { dg-bogus "leak" "" { xfail *-*-* } } */ |
| | | ~ |
| | | | |
| | | (17) ⚠️ ‘obj’ leaks here; was allocated at (6)
|
|
|