1 /* PR ????? - No warning on attempts to access free object
2 Verify that attempts to deallocate objects by pointers with nonzero
5 { dg-options "-O2 -Wall -Wfree-nonheap-object" } */
7 typedef __INTPTR_TYPE__ intptr_t;
8 typedef __SIZE_TYPE__ size_t;
10 void sink (void*, ...);
19 void nowarn_op_delete (void *p, void ***ppp, size_t n, intptr_t iptr)
33 operator delete ((void*)iptr);
42 operator delete (**ppp);
43 operator delete (*ppp);
44 operator delete (ppp);
47 void warn_op_delete_cstaddr (void *p)
51 operator delete (p); // { dg-warning "called on a pointer to an unallocated object" } */
54 void warn_op_delete_funcaddr ()
56 void *p = (void*)&warn_op_delete_funcaddr;
57 operator delete (p); // { dg-warning "called on unallocated object 'void warn_op_delete_funcaddr()" } */
60 void warn_op_delete_string (void *p)
64 operator delete (p); // { dg-warning "called on a pointer to an unallocated object" } */
67 void warn_op_delete_ptr_to_self (void *p)
71 operator delete (p); // { dg-warning "called on unallocated object 'p'" } */
74 void nowarn_op_new_delete (size_t n)
76 void *p = operator new (n);
81 void nowarn_op_new_delete_ptr_plus (size_t n)
83 void *p0_1 = operator new (n);
84 void *p1 = (char*)p0_1 + 1;
86 void *p0_2 = (char*)p1 - 1;
87 sink (p0_1, p1, p0_2);
88 operator delete (p0_2);
91 void warn_op_new_delete_cstoff (size_t n)
93 void *p = operator new (n);
94 void *q = (char*)p + 1;
96 operator delete (q); // { dg-warning "'void operator delete\\\(void\\\*\\\)' called on pointer '\[^'\]+' with nonzero offset 1" }
99 void warn_op_new_delete_ptr_plus (size_t n)
101 char *p = (char*)operator new (n);
103 operator delete (p); // { dg-warning "called on pointer '\[^']+' with nonzero offset 1" }
106 void warn_op_delete_funcret_plus (size_t n)
110 operator delete (p); // { dg-warning "called on pointer '\[^']+' with nonzero offset 1" }
113 void warn_op_delete_eptr_plus (int i)
123 operator delete (p); // { dg-warning "called on pointer '\[^']+' with nonzero offset \\\[1, \\d+]" }