Author: Sven van Haastregt Date: 2019-11-01T13:56:43Z New Revision: 0aed36d261d38c8dbc98bc52be26189e0ce57e30
URL: https://github.com/llvm/llvm-project/commit/0aed36d261d38c8dbc98bc52be26189e0ce57e30 DIFF: https://github.com/llvm/llvm-project/commit/0aed36d261d38c8dbc98bc52be26189e0ce57e30.diff LOG: [OpenCL] Support -fdeclare-opencl-builtins in C++ mode Support for C++ mode was accidentally lacking due to not checking the OpenCLCPlusPlus LangOpts version. Differential Revision: https://reviews.llvm.org/D69233 Added: Modified: clang/lib/Sema/SemaLookup.cpp clang/test/SemaOpenCL/fdeclare-opencl-builtins.cl Removed: ################################################################################ diff --git a/clang/lib/Sema/SemaLookup.cpp b/clang/lib/Sema/SemaLookup.cpp index d56c5980237c..3aedcdc66bcf 100644 --- a/clang/lib/Sema/SemaLookup.cpp +++ b/clang/lib/Sema/SemaLookup.cpp @@ -765,10 +765,13 @@ static void InsertOCLBuiltinDeclarationsFromTable(Sema &S, LookupResult &LR, ASTContext &Context = S.Context; // Ignore this BIF if its version does not match the language options. - if (Context.getLangOpts().OpenCLVersion < OpenCLBuiltin.MinVersion) + unsigned OpenCLVersion = Context.getLangOpts().OpenCLVersion; + if (Context.getLangOpts().OpenCLCPlusPlus) + OpenCLVersion = 200; + if (OpenCLVersion < OpenCLBuiltin.MinVersion) continue; if ((OpenCLBuiltin.MaxVersion != 0) && - (Context.getLangOpts().OpenCLVersion >= OpenCLBuiltin.MaxVersion)) + (OpenCLVersion >= OpenCLBuiltin.MaxVersion)) continue; SmallVector<QualType, 1> RetTypes; diff --git a/clang/test/SemaOpenCL/fdeclare-opencl-builtins.cl b/clang/test/SemaOpenCL/fdeclare-opencl-builtins.cl index 250a3f008c94..84cbb7aeec9b 100644 --- a/clang/test/SemaOpenCL/fdeclare-opencl-builtins.cl +++ b/clang/test/SemaOpenCL/fdeclare-opencl-builtins.cl @@ -4,8 +4,10 @@ // RUN: %clang_cc1 %s -triple spir -verify -pedantic -Wconversion -Werror -fsyntax-only -cl-std=CL1.2 -fdeclare-opencl-builtins -finclude-default-header // RUN: %clang_cc1 %s -triple spir -verify -pedantic -Wconversion -Werror -fsyntax-only -cl-std=CL2.0 -fdeclare-opencl-builtins -DNO_HEADER // RUN: %clang_cc1 %s -triple spir -verify -pedantic -Wconversion -Werror -fsyntax-only -cl-std=CL2.0 -fdeclare-opencl-builtins -finclude-default-header +// RUN: %clang_cc1 %s -triple spir -verify -pedantic -Wconversion -Werror -fsyntax-only -cl-std=CLC++ -fdeclare-opencl-builtins -DNO_HEADER +// RUN: %clang_cc1 %s -triple spir -verify -pedantic -Wconversion -Werror -fsyntax-only -cl-std=CLC++ -fdeclare-opencl-builtins -finclude-default-header -#if __OPENCL_C_VERSION__ >= CL_VERSION_2_0 +#if defined(__OPENCL_CPP_VERSION__) || __OPENCL_C_VERSION__ >= CL_VERSION_2_0 // expected-no-diagnostics #endif @@ -97,7 +99,7 @@ kernel void basic_image_writeonly(write_only image1d_buffer_t image_write_only_i kernel void basic_subgroup(global uint *out) { out[0] = get_sub_group_size(); -#if __OPENCL_C_VERSION__ < CL_VERSION_2_0 +#if !defined(__OPENCL_CPP_VERSION__) && __OPENCL_C_VERSION__ < CL_VERSION_2_0 // expected-error@-2{{implicit declaration of function 'get_sub_group_size' is invalid in OpenCL}} // expected-error@-3{{implicit conversion changes signedness: 'int' to 'uint' (aka 'unsigned int')}} #endif @@ -130,7 +132,7 @@ kernel void basic_work_item() { uint ui; get_enqueued_local_size(ui); -#if __OPENCL_C_VERSION__ < CL_VERSION_2_0 +#if !defined(__OPENCL_CPP_VERSION__) && __OPENCL_C_VERSION__ < CL_VERSION_2_0 // expected-error@-2{{implicit declaration of function 'get_enqueued_local_size' is invalid in OpenCL}} #endif } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits