From: David Malcolm Date: Mon, 13 Mar 2023 18:53:05 +0000 (-0400) Subject: testsuite: add test coverage for analyzer leak false +ve [PR105906] X-Git-Tag: basepoints/gcc-14~566 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=23532dac3f602d6c29f5b7062c7fe30905061764;p=thirdparty%2Fgcc.git testsuite: add test coverage for analyzer leak false +ve [PR105906] Adding regression test coverage; I believe I fixed this leak false positive with r13-5113-g688fc162b76dc6. gcc/testsuite/ChangeLog: PR analyzer/105906 * gcc.dg/analyzer/leak-pr105906.c: New test. Signed-off-by: David Malcolm --- diff --git a/gcc/testsuite/gcc.dg/analyzer/leak-pr105906.c b/gcc/testsuite/gcc.dg/analyzer/leak-pr105906.c new file mode 100644 index 000000000000..72901e4d1eb6 --- /dev/null +++ b/gcc/testsuite/gcc.dg/analyzer/leak-pr105906.c @@ -0,0 +1,32 @@ +/* { dg-additional-options "-Wno-analyzer-too-complex" } */ + +#define NULL ((void *)0) + +#define LEN 64 + +char ** +epystr_explode(const char *delim, char *str) +{ + char **out = NULL; + int i; + + if (str == NULL || delim == NULL) + return NULL; + + out = __builtin_malloc(LEN * sizeof(char *)); + if (out == NULL) + return NULL; + + for (i = 0; i < LEN; i++) { + out[i] = __builtin_strdup("bla"); + if (out[i] == NULL) /* { dg-bogus "leak" } */ + goto freem; + } + return out; + +freem: + while (--i >= 0) + __builtin_free(out[i]); + __builtin_free(out); + return NULL; +}