1// Build don't link: 2 3// Copyright (C) 1999 Free Software Foundation, Inc. 4// Contributed by Nathan Sidwell 15 Apr 1999 <nathan@acm.org> 5 6// delete (void *)e and delete[] (void *)e result in undefined behavior 7// [expr.delete/3]. Check we warn about them 8// operator new functions can only return NULL, if their exceptions 9// specification is `throw()'. All other cases must return a non-null pointer 10// [expr.new/13]. 11 12typedef __SIZE_TYPE__ size_t; 13 14void *operator new(size_t) 15{ 16 return 0; // ERROR - cannot return NULL 17} 18void *operator new[](size_t) 19{ 20 return 0; // ERROR - cannot return NULL 21} 22 23struct X 24{ 25 void *operator new(size_t) 26 { 27 return 0; // ERROR - cannot return NULL 28 } 29 void *operator new[](size_t) 30 { 31 return 0; // ERROR - cannot return NULL 32 } 33}; 34 35struct Y 36{ 37 void *operator new(size_t) throw() 38 { 39 return 0; // ok 40 } 41 void *operator new[](size_t) throw() 42 { 43 return 0; // ok 44 } 45}; 46 47void fn(double *d, void *v) 48{ 49 delete d; // ok 50 delete v; // WARNING - deleting void 51 delete[] d; // ok 52 delete[] v; // WARNING - deleting void 53} 54