[clang] Handle __declspec() attributes in using
[llvm-project.git] / clang / test / SemaOpenCLCXX / newdelete.clcpp
blob127efbedded88f7833d0ad9bd692220609f6fb9f
1 // RUN: %clang_cc1 %s -triple spir-unknown-unknown -pedantic -verify -fsyntax-only
3 class A {
4   public:
5   A() : x(21) {}
6   int x;
7 };
9 typedef __SIZE_TYPE__ size_t;
11 class B {
12   public:
13   B() : bx(42) {}
14   void *operator new(size_t);
15   void operator delete(void *ptr);
16   int bx;
19 // There are no global user-defined new operators at this point. Test that clang
20 // rejects these gracefully.
21 void test_default_new_delete(void *buffer, A **pa) {
22   A *a = new A;         // expected-error {{'default new' is not supported in C++ for OpenCL}}
23   delete a;             // expected-error {{'default delete' is not supported in C++ for OpenCL}}
24   *pa = new (buffer) A; // expected-error {{use of placement new requires explicit declaration}}
27 // expected-note@+1 {{candidate function not viable: requires 2 arguments, but 1 was provided}}
28 void *operator new(size_t _s, void *ptr) noexcept {
29   return ptr;
32 // expected-note@+1 {{candidate function not viable: requires 2 arguments, but 1 was provided}}
33 void *operator new[](size_t _s, void *ptr) noexcept {
34   return ptr;
37 void test_new_delete(void *buffer, A **a, B **b) {
38   *a = new A; // expected-error {{no matching function for call to 'operator new'}}
39   delete a;   // expected-error {{'default delete' is not supported in C++ for OpenCL}}
41   *a = new A[20]; // expected-error {{no matching function for call to 'operator new[]'}}
42   delete[] *a;    // expected-error {{'default delete' is not supported in C++ for OpenCL}}
44   // User-defined placement new is supported.
45   *a = new (buffer) A;
47   // User-defined placement new[] is supported.
48   *a = new (buffer) A[30];
50   // User-defined new is supported.
51   *b = new B;
53   // User-defined delete is supported.
54   delete *b;