1 // RUN: %clang_cc1 -fsyntax-only -fexceptions -fcxx-exceptions -verify -std=c++98 %s 2 // RUN: %clang_cc1 -fsyntax-only -fexceptions -fcxx-exceptions -verify -std=c++11 %s 3 // RUN: %clang_cc1 -fsyntax-only -fexceptions -fcxx-exceptions -verify %s 4 int *use_new(int N) { 5 if (N == 1) 6 return new int; 7 8 return new int [N]; 9 } 10 11 void use_delete(int* ip, int N) { 12 if (N == 1) 13 delete ip; 14 else 15 delete [] ip; 16 } 17 18 namespace std { 19 class bad_alloc { }; 20 21 typedef __SIZE_TYPE__ size_t; 22 } 23 24 void* operator new(std::size_t) throw(std::bad_alloc); 25 #if __cplusplus < 201103L 26 // expected-note@-2 {{previous declaration}} 27 #endif 28 void* operator new[](std::size_t) throw(std::bad_alloc); 29 void operator delete(void*) throw(); // expected-note{{previous declaration}} 30 void operator delete[](void*) throw(); 31 32 void* operator new(std::size_t); 33 #if __cplusplus < 201103L 34 // expected-warning@-2 {{'operator new' is missing exception specification 'throw(std::bad_alloc)'}} 35 #endif 36 void operator delete(void*); 37 #if __cplusplus < 201103L 38 // expected-warning@-2 {{'operator delete' is missing exception specification 'throw()'}} 39 #else 40 // expected-warning@-4 {{previously declared with an explicit exception specification redeclared with an implicit}} 41 #endif 42