From: David Malcolm Date: Thu, 2 Dec 2021 16:48:04 +0000 (-0500) Subject: analyzer: add regression test for leak false +ve [PR103526] X-Git-Tag: basepoints/gcc-13~2556 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=38a0ee2649ef236ea2763bb9cfc42dc917c7d3fd;p=thirdparty%2Fgcc.git analyzer: add regression test for leak false +ve [PR103526] gcc/testsuite/ChangeLog: PR analyzer/103526 * gcc.dg/analyzer/pr103526.c: New test. Signed-off-by: David Malcolm --- diff --git a/gcc/testsuite/gcc.dg/analyzer/pr103526.c b/gcc/testsuite/gcc.dg/analyzer/pr103526.c new file mode 100644 index 000000000000..39d60fd853e1 --- /dev/null +++ b/gcc/testsuite/gcc.dg/analyzer/pr103526.c @@ -0,0 +1,50 @@ +#include +#include + +struct game_state { + const char *word; + char *word_state; +}; + +const char *const teststr = "test string"; + +static struct game_state * +game_new(void) +{ + struct game_state tmp = {0}; + struct game_state *rval = NULL; + size_t wordlen; + + tmp.word = teststr; + wordlen = strlen(tmp.word); + if ((tmp.word_state = malloc(wordlen+1)) == NULL) + goto err; + if ((rval = malloc(sizeof(*rval))) == NULL) + goto err; + memcpy(rval, &tmp, sizeof(*rval)); + + return (rval); +err: + free(tmp.word_state); + free(rval); + return (NULL); +} /* { dg-bogus "leak" } */ + +static void +game_free(struct game_state *game) +{ + if (game == NULL) + return; + free(game->word_state); + free(game); +} + +int +main(void) +{ + struct game_state *game; + if ((game = game_new()) == NULL) + exit(1); + game_free(game); + exit(0); +}