brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.7 KiB · 127efbe Raw
56 lines · plain
1// RUN: %clang_cc1 %s -triple spir-unknown-unknown -pedantic -verify -fsyntax-only2 3class A {4  public:5  A() : x(21) {}6  int x;7};8 9typedef __SIZE_TYPE__ size_t;10 11class B {12  public:13  B() : bx(42) {}14  void *operator new(size_t);15  void operator delete(void *ptr);16  int bx;17};18 19// There are no global user-defined new operators at this point. Test that clang20// rejects these gracefully.21void 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}}25}26 27// expected-note@+1 {{candidate function not viable: requires 2 arguments, but 1 was provided}}28void *operator new(size_t _s, void *ptr) noexcept {29  return ptr;30}31 32// expected-note@+1 {{candidate function not viable: requires 2 arguments, but 1 was provided}}33void *operator new[](size_t _s, void *ptr) noexcept {34  return ptr;35}36 37void 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}}40 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}}43 44  // User-defined placement new is supported.45  *a = new (buffer) A;46 47  // User-defined placement new[] is supported.48  *a = new (buffer) A[30];49 50  // User-defined new is supported.51  *b = new B;52 53  // User-defined delete is supported.54  delete *b;55}56