1018591f524ca4f3a1e657d0d0a66eadf9dbd55f6John McCall// RUN: %clang_cc1 -fsyntax-only -fexceptions -fcxx-exceptions -verify %s
27adb10fa317cd7eacb0959f775e77353d4f24ad1Douglas Gregorint *use_new(int N) {
37adb10fa317cd7eacb0959f775e77353d4f24ad1Douglas Gregor  if (N == 1)
47adb10fa317cd7eacb0959f775e77353d4f24ad1Douglas Gregor    return new int;
57adb10fa317cd7eacb0959f775e77353d4f24ad1Douglas Gregor
67adb10fa317cd7eacb0959f775e77353d4f24ad1Douglas Gregor  return new int [N];
77adb10fa317cd7eacb0959f775e77353d4f24ad1Douglas Gregor}
87adb10fa317cd7eacb0959f775e77353d4f24ad1Douglas Gregor
97adb10fa317cd7eacb0959f775e77353d4f24ad1Douglas Gregorvoid use_delete(int* ip, int N) {
107adb10fa317cd7eacb0959f775e77353d4f24ad1Douglas Gregor  if (N == 1)
117adb10fa317cd7eacb0959f775e77353d4f24ad1Douglas Gregor    delete ip;
127adb10fa317cd7eacb0959f775e77353d4f24ad1Douglas Gregor  else
137adb10fa317cd7eacb0959f775e77353d4f24ad1Douglas Gregor    delete [] ip;
147adb10fa317cd7eacb0959f775e77353d4f24ad1Douglas Gregor}
157adb10fa317cd7eacb0959f775e77353d4f24ad1Douglas Gregor
167adb10fa317cd7eacb0959f775e77353d4f24ad1Douglas Gregornamespace std {
177adb10fa317cd7eacb0959f775e77353d4f24ad1Douglas Gregor  class bad_alloc { };
187adb10fa317cd7eacb0959f775e77353d4f24ad1Douglas Gregor
197adb10fa317cd7eacb0959f775e77353d4f24ad1Douglas Gregor  typedef __SIZE_TYPE__ size_t;
207adb10fa317cd7eacb0959f775e77353d4f24ad1Douglas Gregor}
217adb10fa317cd7eacb0959f775e77353d4f24ad1Douglas Gregor
222eef829b19bdc59976a827fa39b409440e352bffDouglas Gregorvoid* operator new(std::size_t) throw(std::bad_alloc); // expected-note{{previous declaration}}
237adb10fa317cd7eacb0959f775e77353d4f24ad1Douglas Gregorvoid* operator new[](std::size_t) throw(std::bad_alloc);
242eef829b19bdc59976a827fa39b409440e352bffDouglas Gregorvoid operator delete(void*) throw(); // expected-note{{previous declaration}}
257adb10fa317cd7eacb0959f775e77353d4f24ad1Douglas Gregorvoid operator delete[](void*) throw();
262eef829b19bdc59976a827fa39b409440e352bffDouglas Gregor
272eef829b19bdc59976a827fa39b409440e352bffDouglas Gregorvoid* operator new(std::size_t); // expected-warning{{'operator new' is missing exception specification 'throw(std::bad_alloc)'}}
282eef829b19bdc59976a827fa39b409440e352bffDouglas Gregorvoid operator delete(void*); // expected-warning{{'operator delete' is missing exception specification 'throw()'}}
29