[clang] [OpenCL] Add warning for reserved 'long long' type (PR #196002)
https://github.com/svenvh approved this pull request. https://github.com/llvm/llvm-project/pull/196002 ___ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [OpenCL] Add warning for reserved 'long long' type (PR #196002)
@@ -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}}
wenju-he wrote:
done
https://github.com/llvm/llvm-project/pull/196002
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [OpenCL] Add warning for reserved 'long long' type (PR #196002)
@@ -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];
wenju-he wrote:
done, reverted change and disabled the warning for the test
https://github.com/llvm/llvm-project/pull/196002
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [OpenCL] Add warning for reserved 'long long' type (PR #196002)
@@ -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) {
wenju-he wrote:
done
https://github.com/llvm/llvm-project/pull/196002
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [OpenCL] Add warning for reserved 'long long' type (PR #196002)
@@ -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 wenju-he wrote: done, thanks https://github.com/llvm/llvm-project/pull/196002 ___ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [OpenCL] Add warning for reserved 'long long' type (PR #196002)
https://github.com/wenju-he edited https://github.com/llvm/llvm-project/pull/196002 ___ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [OpenCL] Add warning for reserved 'long long' type (PR #196002)
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
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;
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 0..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; //
[clang] [OpenCL] Add warning for reserved 'long long' type (PR #196002)
llvmorg-github-actions[bot] wrote:
@llvm/pr-subscribers-backend-spir-v
Author: Wenju He (wenju-he)
Changes
'long long' is a reserved data type in all versions of OpenCL C.
---
Full diff: https://github.com/llvm/llvm-project/pull/196002.diff
6 Files Affected:
- (modified) clang/include/clang/Basic/DiagnosticSemaKinds.td (+3)
- (modified) clang/lib/Sema/SemaType.cpp (+8-4)
- (modified) clang/test/Misc/languageOptsOpenCL.cl (-2)
- (modified) clang/test/SemaOpenCL/fdeclare-opencl-builtins.cl (+1-1)
- (added) clang/test/SemaOpenCL/longlong.cl (+9)
- (modified) clang/test/SemaSPIRV/BuiltIns/subgroup-errors.c (-1)
``diff
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;
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 0..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
[clang] [OpenCL] Add warning for reserved 'long long' type (PR #196002)
llvmorg-github-actions[bot] wrote:
@llvm/pr-subscribers-clang
Author: Wenju He (wenju-he)
Changes
'long long' is a reserved data type in all versions of OpenCL C.
---
Full diff: https://github.com/llvm/llvm-project/pull/196002.diff
6 Files Affected:
- (modified) clang/include/clang/Basic/DiagnosticSemaKinds.td (+3)
- (modified) clang/lib/Sema/SemaType.cpp (+8-4)
- (modified) clang/test/Misc/languageOptsOpenCL.cl (-2)
- (modified) clang/test/SemaOpenCL/fdeclare-opencl-builtins.cl (+1-1)
- (added) clang/test/SemaOpenCL/longlong.cl (+9)
- (modified) clang/test/SemaSPIRV/BuiltIns/subgroup-errors.c (-1)
``diff
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;
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 0..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
[clang] [OpenCL] Add warning for reserved 'long long' type (PR #196002)
https://github.com/wenju-he created
https://github.com/llvm/llvm-project/pull/196002
'long long' is a reserved data type in all versions of OpenCL C.
>From c5151a3177413a46cf45415718a8259d08044bb1 Mon Sep 17 00:00:00 2001
From: Wenju He
Date: Wed, 6 May 2026 07:11:00 +0200
Subject: [PATCH] [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;
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 0..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
