https://github.com/wenju-he updated https://github.com/llvm/llvm-project/pull/196002
>From c5151a3177413a46cf45415718a8259d08044bb1 Mon Sep 17 00:00:00 2001 From: Wenju He <[email protected]> Date: Wed, 6 May 2026 07:11:00 +0200 Subject: [PATCH 1/2] [OpenCL] Add warning for reserved 'long long' type 'long long' is a reserved data type in all versions of OpenCL C. --- clang/include/clang/Basic/DiagnosticSemaKinds.td | 3 +++ clang/lib/Sema/SemaType.cpp | 12 ++++++++---- clang/test/Misc/languageOptsOpenCL.cl | 2 -- clang/test/SemaOpenCL/fdeclare-opencl-builtins.cl | 2 +- clang/test/SemaOpenCL/longlong.cl | 9 +++++++++ clang/test/SemaSPIRV/BuiltIns/subgroup-errors.c | 1 - 6 files changed, 21 insertions(+), 8 deletions(-) create mode 100644 clang/test/SemaOpenCL/longlong.cl diff --git a/clang/include/clang/Basic/DiagnosticSemaKinds.td b/clang/include/clang/Basic/DiagnosticSemaKinds.td index e059260778631..c15a9ec1ff0f6 100644 --- a/clang/include/clang/Basic/DiagnosticSemaKinds.td +++ b/clang/include/clang/Basic/DiagnosticSemaKinds.td @@ -11832,6 +11832,9 @@ def err_opencl_requires_extension : Error< def ext_opencl_double_without_pragma : Extension< "Clang permits use of type 'double' regardless pragma if 'cl_khr_fp64' is" " supported">; +def warn_opencl_longlong : Warning< + "'long long' is a reserved data type in OpenCL C">, + InGroup<ReservedIdentifier>; def warn_opencl_generic_address_space_arg : Warning< "passing non-generic address space pointer to %0" " may cause dynamic conversion affecting performance">, diff --git a/clang/lib/Sema/SemaType.cpp b/clang/lib/Sema/SemaType.cpp index a5fceb065fb88..9f06bf66cfae5 100644 --- a/clang/lib/Sema/SemaType.cpp +++ b/clang/lib/Sema/SemaType.cpp @@ -1041,8 +1041,10 @@ static QualType ConvertDeclSpecToType(TypeProcessingState &state) { case TypeSpecifierWidth::LongLong: Result = Context.LongLongTy; - // 'long long' is a C99 or C++11 feature. - if (!S.getLangOpts().C99) { + if (S.getLangOpts().OpenCL) { + S.Diag(DS.getTypeSpecWidthLoc(), diag::warn_opencl_longlong); + } else if (!S.getLangOpts().C99) { + // 'long long' is a C99 or C++11 feature. if (S.getLangOpts().CPlusPlus) S.Diag(DS.getTypeSpecWidthLoc(), S.getLangOpts().CPlusPlus11 ? @@ -1066,8 +1068,10 @@ static QualType ConvertDeclSpecToType(TypeProcessingState &state) { case TypeSpecifierWidth::LongLong: Result = Context.UnsignedLongLongTy; - // 'long long' is a C99 or C++11 feature. - if (!S.getLangOpts().C99) { + if (S.getLangOpts().OpenCL) { + S.Diag(DS.getTypeSpecWidthLoc(), diag::warn_opencl_longlong); + } else if (!S.getLangOpts().C99) { + // 'long long' is a C99 or C++11 feature. if (S.getLangOpts().CPlusPlus) S.Diag(DS.getTypeSpecWidthLoc(), S.getLangOpts().CPlusPlus11 ? diff --git a/clang/test/Misc/languageOptsOpenCL.cl b/clang/test/Misc/languageOptsOpenCL.cl index 0f5bd22c8e91e..fd1ddfd73b97b 100644 --- a/clang/test/Misc/languageOptsOpenCL.cl +++ b/clang/test/Misc/languageOptsOpenCL.cl @@ -8,8 +8,6 @@ kernel void test() { int v1[(__alignof(int)== 4) ? 1 : -1]; int v2[(sizeof(long) == 8) ? 1 : -1]; int v3[(__alignof(long)== 8) ? 1 : -1]; - int v4[(sizeof(long long) == 16) ? 1 : -1]; - int v5[(__alignof(long long)== 16) ? 1 : -1]; int v6[(sizeof(float) == 4) ? 1 : -1]; int v7[(__alignof(float)== 4) ? 1 : -1]; #pragma OPENCL EXTENSION cl_khr_fp64 : enable diff --git a/clang/test/SemaOpenCL/fdeclare-opencl-builtins.cl b/clang/test/SemaOpenCL/fdeclare-opencl-builtins.cl index 7b499be136664..1fb2579bdc483 100644 --- a/clang/test/SemaOpenCL/fdeclare-opencl-builtins.cl +++ b/clang/test/SemaOpenCL/fdeclare-opencl-builtins.cl @@ -117,7 +117,7 @@ kernel void test_enum_args(volatile global atomic_int *global_p, global int *exp #endif #if defined(__OPENCL_CPP_VERSION__) || __OPENCL_C_VERSION__ >= 200 -void test_typedef_args(clk_event_t evt, volatile atomic_flag *flg, global unsigned long long *values) { +void test_typedef_args(clk_event_t evt, volatile atomic_flag *flg, global unsigned long *values) { capture_event_profiling_info(evt, CLK_PROFILING_COMMAND_EXEC_TIME, values); atomic_flag_clear(flg); diff --git a/clang/test/SemaOpenCL/longlong.cl b/clang/test/SemaOpenCL/longlong.cl new file mode 100644 index 0000000000000..75edb6b2cf3e9 --- /dev/null +++ b/clang/test/SemaOpenCL/longlong.cl @@ -0,0 +1,9 @@ +// RUN: %clang_cc1 %s -cl-std=CL1.0 -verify -fsyntax-only +// RUN: %clang_cc1 %s -cl-std=CL1.2 -verify -fsyntax-only +// RUN: %clang_cc1 %s -cl-std=CL2.0 -verify -fsyntax-only +// RUN: %clang_cc1 %s -cl-std=CL3.0 -verify -fsyntax-only + +void kernel test_longlong() { + long long x = 0; // expected-warning{{'long long' is a reserved data type in OpenCL C}} + unsigned long long y = 0; // expected-warning{{'long long' is a reserved data type in OpenCL C}} +} diff --git a/clang/test/SemaSPIRV/BuiltIns/subgroup-errors.c b/clang/test/SemaSPIRV/BuiltIns/subgroup-errors.c index ea41121b58c59..95edf585dd45b 100644 --- a/clang/test/SemaSPIRV/BuiltIns/subgroup-errors.c +++ b/clang/test/SemaSPIRV/BuiltIns/subgroup-errors.c @@ -14,7 +14,6 @@ void ballot(_Bool c) { void shuffle() { int x = 0; - long long l = 0; float f = 0; int [[clang::ext_vector_type(1)]] v; (void)__builtin_spirv_subgroup_shuffle(x, x); >From 1ddd837e7a7bf2c7dd72e7e6fad3de3017ca568e Mon Sep 17 00:00:00 2001 From: Wenju He <[email protected]> Date: Wed, 6 May 2026 11:01:43 +0200 Subject: [PATCH 2/2] add spec reference, add CLC++/vector test, disable warning in languageOptsOpenCL.cl --- clang/lib/Sema/SemaType.cpp | 2 ++ clang/test/Misc/languageOptsOpenCL.cl | 4 +++- clang/test/SemaOpenCL/longlong.cl | 3 +++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/clang/lib/Sema/SemaType.cpp b/clang/lib/Sema/SemaType.cpp index 9f06bf66cfae5..44ac4f6630690 100644 --- a/clang/lib/Sema/SemaType.cpp +++ b/clang/lib/Sema/SemaType.cpp @@ -1042,6 +1042,7 @@ static QualType ConvertDeclSpecToType(TypeProcessingState &state) { Result = Context.LongLongTy; if (S.getLangOpts().OpenCL) { + // OpenCL v3.0 s6.3.4: 'long long' is a reserved data type. S.Diag(DS.getTypeSpecWidthLoc(), diag::warn_opencl_longlong); } else if (!S.getLangOpts().C99) { // 'long long' is a C99 or C++11 feature. @@ -1069,6 +1070,7 @@ static QualType ConvertDeclSpecToType(TypeProcessingState &state) { Result = Context.UnsignedLongLongTy; if (S.getLangOpts().OpenCL) { + // OpenCL v3.0 s6.3.4: 'long long' is a reserved data type. S.Diag(DS.getTypeSpecWidthLoc(), diag::warn_opencl_longlong); } else if (!S.getLangOpts().C99) { // 'long long' is a C99 or C++11 feature. diff --git a/clang/test/Misc/languageOptsOpenCL.cl b/clang/test/Misc/languageOptsOpenCL.cl index fd1ddfd73b97b..dc3672364ee1d 100644 --- a/clang/test/Misc/languageOptsOpenCL.cl +++ b/clang/test/Misc/languageOptsOpenCL.cl @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -x cl %s -verify -triple spir-unknown-unknown +// RUN: %clang_cc1 -x cl %s -verify -triple spir-unknown-unknown -Wno-reserved-identifier // expected-no-diagnostics // Test the forced language options for OpenCL are set correctly. @@ -8,6 +8,8 @@ kernel void test() { int v1[(__alignof(int)== 4) ? 1 : -1]; int v2[(sizeof(long) == 8) ? 1 : -1]; int v3[(__alignof(long)== 8) ? 1 : -1]; + int v4[(sizeof(long long) == 16) ? 1 : -1]; + int v5[(__alignof(long long)== 16) ? 1 : -1]; int v6[(sizeof(float) == 4) ? 1 : -1]; int v7[(__alignof(float)== 4) ? 1 : -1]; #pragma OPENCL EXTENSION cl_khr_fp64 : enable diff --git a/clang/test/SemaOpenCL/longlong.cl b/clang/test/SemaOpenCL/longlong.cl index 75edb6b2cf3e9..cf7bdf92b6c4e 100644 --- a/clang/test/SemaOpenCL/longlong.cl +++ b/clang/test/SemaOpenCL/longlong.cl @@ -2,8 +2,11 @@ // RUN: %clang_cc1 %s -cl-std=CL1.2 -verify -fsyntax-only // RUN: %clang_cc1 %s -cl-std=CL2.0 -verify -fsyntax-only // RUN: %clang_cc1 %s -cl-std=CL3.0 -verify -fsyntax-only +// RUN: %clang_cc1 %s -cl-std=CLC++ -verify -fsyntax-only void kernel test_longlong() { long long x = 0; // expected-warning{{'long long' is a reserved data type in OpenCL C}} unsigned long long y = 0; // expected-warning{{'long long' is a reserved data type in OpenCL C}} + typedef long long longlong2 __attribute__((ext_vector_type(2))); // expected-warning{{'long long' is a reserved data type in OpenCL C}} + typedef unsigned long long ulonglong2 __attribute__((ext_vector_type(4))); // expected-warning{{'long long' is a reserved data type in OpenCL C}} } _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
