[PATCH] D63561: [OpenCL] Improve diagnostic for placement new
Sven van Haastregt via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed Jun 19 08:47:27 PDT 2019
svenvh created this revision.
svenvh added a reviewer: Anastasia.
Herald added subscribers: cfe-commits, yaxunl.
Herald added a project: clang.
Without an explicit declaration for placement new, clang would reject
uses of placement new with "default new' is not supported in OpenCL
C++", suggesting that placement new is not supported, see e.g.
PR42060.
Repository:
rC Clang
https://reviews.llvm.org/D63561
Files:
include/clang/Basic/DiagnosticSemaKinds.td
lib/Sema/SemaExprCXX.cpp
test/SemaOpenCLCXX/newdelete.cl
Index: test/SemaOpenCLCXX/newdelete.cl
===================================================================
--- test/SemaOpenCLCXX/newdelete.cl
+++ test/SemaOpenCLCXX/newdelete.cl
@@ -21,7 +21,7 @@
void test_default_new_delete(void *buffer, A **pa) {
A *a = new A; // expected-error {{'default new' is not supported in OpenCL C++}}
delete a; // expected-error {{'default delete' is not supported in OpenCL C++}}
- *pa = new (buffer) A; // expected-error {{'default new' is not supported in OpenCL C++}}
+ *pa = new (buffer) A; // expected-error {{use of placement new requires explicit declaration}}
}
// expected-note at +1 {{candidate function not viable: requires 2 arguments, but 1 was provided}}
Index: lib/Sema/SemaExprCXX.cpp
===================================================================
--- lib/Sema/SemaExprCXX.cpp
+++ lib/Sema/SemaExprCXX.cpp
@@ -2413,7 +2413,11 @@
}
if (getLangOpts().OpenCLCPlusPlus && R.empty()) {
- Diag(StartLoc, diag::err_openclcxx_not_supported) << "default new";
+ if (PlaceArgs.empty()) {
+ Diag(StartLoc, diag::err_openclcxx_not_supported) << "default new";
+ } else {
+ Diag(StartLoc, diag::err_openclcxx_placement_new);
+ }
return true;
}
Index: include/clang/Basic/DiagnosticSemaKinds.td
===================================================================
--- include/clang/Basic/DiagnosticSemaKinds.td
+++ include/clang/Basic/DiagnosticSemaKinds.td
@@ -8808,6 +8808,9 @@
"vector component name '%0' is an OpenCL version 2.2 feature">,
InGroup<OpenCLUnsupportedRGBA>;
+def err_openclcxx_placement_new : Error<
+ "use of placement new requires explicit declaration">;
+
// MIG routine annotations.
def warn_mig_server_routine_does_not_return_kern_return_t : Warning<
"'mig_server_routine' attribute only applies to routines that return a kern_return_t">,
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D63561.205611.patch
Type: text/x-patch
Size: 1903 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20190619/2c1c4fad/attachment.bin>
More information about the cfe-commits
mailing list