/* { dg-do compile } */ /* { dg-options "-fdiagnostics-path-format=separate-events" } */ #include void *wrapped_malloc (size_t size) { return malloc (size); } void wrapped_free (void *ptr) { free (ptr); /* { dg-warning "double-free of 'ptr' \\\[CWE-415\\]" } */ } typedef struct boxed_int { int i; } boxed_int; boxed_int * make_boxed_int (int i) { boxed_int *result = (boxed_int *)wrapped_malloc (sizeof (boxed_int)); result->i = i; return result; } void free_boxed_int (boxed_int *bi) { wrapped_free (bi); } void test (int i) { /* { dg-message "\\(1\\) entering 'test'" } */ boxed_int *obj = make_boxed_int (i); /* { dg-message "\\(2\\) calling 'make_boxed_int'" } */ /* etc */ free_boxed_int (obj); free_boxed_int (obj); }