summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.dg/free-1.c
blob: 5496c84fdb82e38cfc3bee12d9fcdcc6e428bec3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/* PR c/36970 */
/* { dg-do compile } */
/* { dg-options "-O2" } */

extern void free (void *);

char *p, buf3[10], d;
struct S { char a; int b; } *r;

void foo (void)
{
  char buf[10], buf2[10], c;
  static char buf4[10], e;
  char *q = buf;
  free (p);
  free (q);	      /* { dg-warning "attempt to free a non-heap object" } */
  free (buf2);	      /* { dg-warning "attempt to free a non-heap object" } */
  free (&c);	      /* { dg-warning "attempt to free a non-heap object" } */
  free (buf3);	      /* { dg-warning "attempt to free a non-heap object" } */
  free (&d);	      /* { dg-warning "attempt to free a non-heap object" } */
  free (buf4);	      /* { dg-warning "attempt to free a non-heap object" } */
  free (&e);	      /* { dg-warning "attempt to free a non-heap object" } */
  free (&r->a);
  free ("abcd");      /* { dg-warning "attempt to free a non-heap object" } */
  free (L"abcd");     /* { dg-warning "attempt to free a non-heap object" } */
}