1 /* PR c++/98305 spurious -Wmismatched-new-delete on template instance
3 { dg-options "-Wall" } */
5 typedef __SIZE_TYPE__ size_t;
7 void sink (void*, ...);
14 void* operator new (size_t);
15 void operator delete (void*);
17 void* operator new[] (size_t);
18 void operator delete[] (void*);
20 template <class, class>
25 void* operator new (size_t);
26 void operator delete (void*);
28 void* operator new[] (size_t);
29 void operator delete[] (void*);
36 A1<int> *p = new A1<int>();
42 A1<long> *p = new A1<long>();
48 void *p = new A1<int>();
49 A1<long> *q = (A1<long>*)p;
51 delete q; // { dg-warning "-Wmismatched-new-delete" }
58 A1<int>::A2<int, int> *p = new A1<int>::A2<int, int>();
63 A1<void>::A2<int, long> *p = new A1<void>::A2<int, long>();
68 A1<char*>::A2<long, double> *p = new A1<char*>::A2<long, double>();
73 typedef A1<char>::A2<char, char> A;
75 A *p = (A*)new A1<char>::A2<char, int>();
77 delete p; // { dg-warning "-Wmismatched-new-delete" }
81 A *p = (A*)new A1<char>::A2<int, char>();
83 delete p; // { dg-warning "-Wmismatched-new-delete" }
87 A *p = (A*)new A1<int>::A2<char, char>();
89 delete p; // { dg-warning "-Wmismatched-new-delete" }
99 void* operator new (size_t);
100 void operator delete (void*);
102 void* operator new[] (size_t);
103 void operator delete[] (void*);
105 template <class, class>
110 void* operator new (size_t);
111 void operator delete (void*);
113 void* operator new[] (size_t);
114 void operator delete[] (void*);
121 typedef B1<char> B1c;
122 typedef B1c::B2<B1c, B1c> B1cB2B1c;
125 B1cB2B1c *p = new B1cB2B1c;
131 B1cB2B1c *p = new B1cB2B1c[1];
140 typedef B1<char>::B2<char, char> B;
143 B *p = (B*)new A1<char>::A2<char, int>[1];
145 delete[] p; // { dg-warning "-Wmismatched-new-delete" }
149 B *p = (B*)new A1<char>::A2<int, char>[2];
151 delete[] p; // { dg-warning "-Wmismatched-new-delete" }
155 B *p = (B*)new A1<int>::A2<char, char>[3];
157 delete[] p; // { dg-warning "-Wmismatched-new-delete" }