Mercurial > hg > CbC > CbC_llvm
view clang/test/SemaOpenCLCXX/newdelete.cl @ 176:de4ac79aef9d
...
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 25 May 2020 17:13:11 +0900 |
parents | 1d019706d866 |
children |
line wrap: on
line source
// RUN: %clang_cc1 %s -triple spir-unknown-unknown -cl-std=clc++ -pedantic -verify -fsyntax-only class A { public: A() : x(21) {} int x; }; typedef __SIZE_TYPE__ size_t; class B { public: B() : bx(42) {} void *operator new(size_t); void operator delete(void *ptr); int bx; }; // There are no global user-defined new operators at this point. Test that clang // rejects these gracefully. void test_default_new_delete(void *buffer, A **pa) { A *a = new A; // expected-error {{'default new' is not supported in C++ for OpenCL}} delete a; // expected-error {{'default delete' is not supported in C++ for OpenCL}} *pa = new (buffer) A; // expected-error {{use of placement new requires explicit declaration}} } // expected-note@+1 {{candidate function not viable: requires 2 arguments, but 1 was provided}} void *operator new(size_t _s, void *ptr) noexcept { return ptr; } // expected-note@+1 {{candidate function not viable: requires 2 arguments, but 1 was provided}} void *operator new[](size_t _s, void *ptr) noexcept { return ptr; } void test_new_delete(void *buffer, A **a, B **b) { *a = new A; // expected-error {{no matching function for call to 'operator new'}} delete a; // expected-error {{'default delete' is not supported in C++ for OpenCL}} *a = new A[20]; // expected-error {{no matching function for call to 'operator new[]'}} delete[] *a; // expected-error {{'default delete' is not supported in C++ for OpenCL}} // User-defined placement new is supported. *a = new (buffer) A; // User-defined placement new[] is supported. *a = new (buffer) A[30]; // User-defined new is supported. *b = new B; // User-defined delete is supported. delete *b; }