From 9128765a5c7f093821d363a3f71bb3ab5dfbf9c5 Mon Sep 17 00:00:00 2001 From: David Malcolm Date: Fri, 31 Jul 2020 17:59:40 -0400 Subject: [PATCH 376/377] FIXME: add gcc.dg/analyzer/single-field.c --- gcc/testsuite/gcc.dg/analyzer/single-field.c | 37 ++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/analyzer/single-field.c diff --git a/gcc/testsuite/gcc.dg/analyzer/single-field.c b/gcc/testsuite/gcc.dg/analyzer/single-field.c new file mode 100644 index 00000000000..d54cfb0c4d1 --- /dev/null +++ b/gcc/testsuite/gcc.dg/analyzer/single-field.c @@ -0,0 +1,37 @@ +#include +#include "analyzer-decls.h" + +struct foo +{ + char *ptr; +}; + +void test_1 (struct foo f) +{ + __analyzer_describe (0, f.ptr); /* { dg-warning "svalue: 'INIT_VAL\\(f.ptr\\)'" } */ +} + +static void called_by_test_2 (struct foo f_inner) +{ + free (f_inner.ptr); + free (f_inner.ptr); /* { dg-warning "double-'free' of 'f_outer.ptr'" } */ +} +void test_2 (struct foo f_outer) +{ + called_by_test_2 (f_outer); +} + +struct nested +{ + struct foo f; +}; + +static void called_by_test_3 (struct nested n_inner) +{ + free (n_inner.f.ptr); + free (n_inner.f.ptr); /* { dg-warning "double-'free' of 'n_outer.f.ptr'" } */ +} +void test_3 (struct nested n_outer) +{ + called_by_test_3 (n_outer); +} -- 2.26.2