// RUN: %clang_cc1 -fsyntax-only -verify -fexceptions %s // expected-no-diagnostics #include "Inputs/cuda.h" __device__ void operator delete(void *p) {} class A { int x; public: A() { x = 123; } }; template class shared_ptr { T *ptr; public: shared_ptr(T *p) { ptr = p; } }; // The constructor of B calls the delete operator to clean up // the memory allocated by the new operator when exceptions happen. // Make sure that there are no diagnostics due to the device delete // operator is used. // // No need to do similar checks on the device side since it does // not support exception. struct B{ shared_ptr pa{new A}; }; int main() { B b; }