libcpp, c, middle-end: Optimize initializers using #embed in C
[official-gcc.git] / gcc / testsuite / gcc.dg / Wfree-nonheap-object-3.c
bloba472b93fb87d69558ef14b7a71411e5ecb401991
1 /* PR ????? - No warning on attempts to access free object
2 Verify that freeing unallocated objects referenced indirectly through
3 pointers obtained from function calls is diagnosed.
4 { dg-do compile }
5 { dg-options "-O2 -Wall -Wfree-nonheap-object" } */
7 typedef __SIZE_TYPE__ size_t;
9 extern void free (void*);
10 extern char* memchr (const void*, int, size_t);
11 extern char* strchr (const char*, int);
13 void sink (void*, ...);
15 extern char ecarr[];
16 extern void* eparr[];
18 extern char *eptr;
21 void warn_free_memchr_ecarr (int x, size_t n)
23 char *p = memchr (ecarr, x, n);
24 sink (p);
25 free (p); // { dg-warning "\\\[-Wfree-nonheap-object" }
28 void warn_free_memchr_ecarr_offset (int i, int j, int x, size_t n)
30 char *p = memchr (ecarr + i, x, n);
31 char *q = p + j;
32 sink (p, q);
33 free (q); // { dg-warning "\\\[-Wfree-nonheap-object" }
37 void warn_free_memchr_local_arr (int x, size_t n)
39 char a[8];
40 sink (a);
42 char *p = memchr (a, x, n);
43 sink (p);
44 free (p); // { dg-warning "\\\[-Wfree-nonheap-object" }
47 void warn_free_memchr_local_arr_offset (int i, int j, int x, size_t n)
49 char a[8];
50 sink (a);
52 char *p = memchr (a + i, x, n);
53 char *q = p + j;
54 sink (p, q);
55 free (q); // { dg-warning "\\\[-Wfree-nonheap-object" }