/* { dg-additional-options "-Wno-analyzer-too-complex" } */ #include struct foo { int dummy; }; struct foo ** test (int n) { struct foo **arr; int i; if ((arr = (struct foo **)malloc(n * sizeof(struct foo *))) == NULL) return NULL; for (i = 0; i < n; i++) { if ((arr[i] = (struct foo *)malloc(sizeof(struct foo))) == NULL) { for (; i >= 0; i++) { free(arr[i]); /* { dg-bogus "double-'free'" } */ } free(arr); /* { dg-warning "leak" } */ return NULL; } } return arr; }