1// REQUIRES: nvptx-registered-target
2// RUN: %clang_cc1 -x cl -cl-std=CL %s -verify -triple nvptx-unknown-unknown
3// RUN: %clang_cc1 -x cl -cl-std=CL1.1 %s -verify -triple nvptx-unknown-unknown
4// RUN: %clang_cc1 -x cl -cl-std=CL1.2 %s -verify -triple nvptx-unknown-unknown
5// RUN: %clang_cc1 -x cl -cl-std=CL2.0 %s -verify -triple nvptx-unknown-unknown
6// RUN: %clang_cc1 -x cl -cl-std=CL %s -verify -triple nvptx-unknown-unknown -Wpedantic-core-features -DTEST_CORE_FEATURES
7// RUN: %clang_cc1 -x cl -cl-std=CL1.1 %s -verify -triple nvptx-unknown-unknown -Wpedantic-core-features -DTEST_CORE_FEATURES
8// RUN: %clang_cc1 -x cl -cl-std=CL1.2 %s -verify -triple nvptx-unknown-unknown -Wpedantic-core-features -DTEST_CORE_FEATURES
9// RUN: %clang_cc1 -x cl -cl-std=CL2.0 %s -verify -triple nvptx-unknown-unknown -Wpedantic-core-features -DTEST_CORE_FEATURES
10// RUN: %clang_cc1 -x cl -cl-std=CL %s -verify -triple nvptx64-unknown-unknown
11// RUN: %clang_cc1 -x cl -cl-std=CL1.1 %s -verify -triple nvptx64-unknown-unknown
12// RUN: %clang_cc1 -x cl -cl-std=CL1.2 %s -verify -triple nvptx64-unknown-unknown
13// RUN: %clang_cc1 -x cl -cl-std=CL2.0 %s -verify -triple nvptx64-unknown-unknown
14// RUN: %clang_cc1 -x cl -cl-std=CL %s -verify -triple nvptx64-unknown-unknown -Wpedantic-core-features -DTEST_CORE_FEATURES
15// RUN: %clang_cc1 -x cl -cl-std=CL1.1 %s -verify -triple nvptx64-unknown-unknown -Wpedantic-core-features -DTEST_CORE_FEATURES
16// RUN: %clang_cc1 -x cl -cl-std=CL1.2 %s -verify -triple nvptx64-unknown-unknown -Wpedantic-core-features -DTEST_CORE_FEATURES
17// RUN: %clang_cc1 -x cl -cl-std=CL2.0 %s -verify -triple nvptx64-unknown-unknown -Wpedantic-core-features -DTEST_CORE_FEATURES
18
19// Extensions in all versions
20#ifndef cl_clang_storage_class_specifiers
21#error "Missing cl_clang_storage_class_specifiers define"
22#endif
23#pragma OPENCL EXTENSION cl_clang_storage_class_specifiers: enable
24
25#ifdef cl_khr_fp16
26#error "Incorrect cl_khr_fp16 define"
27#endif
28#pragma OPENCL EXTENSION cl_khr_fp16: enable
29// expected-warning@-1{{unsupported OpenCL extension 'cl_khr_fp16' - ignoring}}
30
31#ifdef cl_khr_int64_base_atomics
32#error "Incorrect cl_khr_int64_base_atomics define"
33#endif
34#pragma OPENCL EXTENSION cl_khr_int64_base_atomics: enable
35// expected-warning@-1{{unsupported OpenCL extension 'cl_khr_int64_base_atomics' - ignoring}}
36
37#ifdef cl_khr_int64_extended_atomics
38#error "Incorrect cl_khr_int64_extended_atomics define"
39#endif
40#pragma OPENCL EXTENSION cl_khr_int64_extended_atomics: enable
41// expected-warning@-1{{unsupported OpenCL extension 'cl_khr_int64_extended_atomics' - ignoring}}
42
43#ifndef cl_khr_gl_sharing
44#error "Missing cl_khr_gl_sharing define"
45#endif
46#pragma OPENCL EXTENSION cl_khr_gl_sharing: enable
47
48#ifndef cl_khr_icd
49#error "Missing cl_khr_icd define"
50#endif
51#pragma OPENCL EXTENSION cl_khr_icd: enable
52
53// Core features in CL 1.1
54
55#ifndef cl_khr_byte_addressable_store
56#error "Missing cl_khr_byte_addressable_store define"
57#endif
58#pragma OPENCL EXTENSION cl_khr_byte_addressable_store: enable
59#if (__OPENCL_C_VERSION__ >= 110) && defined TEST_CORE_FEATURES
60// expected-warning@-2{{OpenCL extension 'cl_khr_byte_addressable_store' is core feature or supported optional core feature - ignoring}}
61#endif
62
63#ifndef cl_khr_global_int32_base_atomics
64#error "Missing cl_khr_global_int32_base_atomics define"
65#endif
66#pragma OPENCL EXTENSION cl_khr_global_int32_base_atomics: enable
67#if (__OPENCL_C_VERSION__ >= 110) && defined TEST_CORE_FEATURES
68// expected-warning@-2{{OpenCL extension 'cl_khr_global_int32_base_atomics' is core feature or supported optional core feature - ignoring}}
69#endif
70
71#ifndef cl_khr_global_int32_extended_atomics
72#error "Missing cl_khr_global_int32_extended_atomics define"
73#endif
74#pragma OPENCL EXTENSION cl_khr_global_int32_extended_atomics: enable
75#if (__OPENCL_C_VERSION__ >= 110) && defined TEST_CORE_FEATURES
76// expected-warning@-2{{OpenCL extension 'cl_khr_global_int32_extended_atomics' is core feature or supported optional core feature - ignoring}}
77#endif
78
79#ifndef cl_khr_local_int32_base_atomics
80#error "Missing cl_khr_local_int32_base_atomics define"
81#endif
82#pragma OPENCL EXTENSION cl_khr_local_int32_base_atomics: enable
83#if (__OPENCL_C_VERSION__ >= 110) && defined TEST_CORE_FEATURES
84// expected-warning@-2{{OpenCL extension 'cl_khr_local_int32_base_atomics' is core feature or supported optional core feature - ignoring}}
85#endif
86
87#ifndef cl_khr_local_int32_extended_atomics
88#error "Missing cl_khr_local_int32_extended_atomics define"
89#endif
90#pragma OPENCL EXTENSION cl_khr_local_int32_extended_atomics: enable
91#if (__OPENCL_C_VERSION__ >= 110) && defined TEST_CORE_FEATURES
92// expected-warning@-2{{OpenCL extension 'cl_khr_local_int32_extended_atomics' is core feature or supported optional core feature - ignoring}}
93#endif
94
95#if (__OPENCL_C_VERSION__ < 110)
96// Deprecated above 1.0
97#ifdef cl_khr_select_fprounding_mode
98#error "Incorrect cl_khr_select_fprounding_mode define"
99#endif
100#pragma OPENCL EXTENSION cl_khr_select_fprounding_mode: enable
101// expected-warning@-1{{unsupported OpenCL extension 'cl_khr_select_fprounding_mode' - ignoring}}
102#endif
103
104
105// Core feature in CL 1.2
106#ifndef cl_khr_fp64
107#error "Missing cl_khr_fp64 define"
108#endif
109#pragma OPENCL EXTENSION cl_khr_fp64: enable
110#if (__OPENCL_C_VERSION__ >= 120) && defined TEST_CORE_FEATURES
111// expected-warning@-2{{OpenCL extension 'cl_khr_fp64' is core feature or supported optional core feature - ignoring}}
112#endif
113
114// Core feature in CL 2.0, but not supported on nvptx
115#ifdef cl_khr_3d_image_writes
116#error "Incorrect cl_khr_3d_image_writes define"
117#endif
118#pragma OPENCL EXTENSION cl_khr_3d_image_writes: enable
119// expected-warning@-1{{unsupported OpenCL extension 'cl_khr_3d_image_writes' - ignoring}}
120
121
122
123#ifdef cl_khr_gl_event
124#error "Incorrect cl_khr_gl_event define"
125#endif
126#pragma OPENCL EXTENSION cl_khr_gl_event: enable
127// expected-warning@-1{{unsupported OpenCL extension 'cl_khr_gl_event' - ignoring}}
128
129#ifdef cl_khr_d3d10_sharing
130#error "Incorrect cl_khr_d3d10_sharing define"
131#endif
132#pragma OPENCL EXTENSION cl_khr_d3d10_sharing: enable
133// expected-warning@-1{{unsupported OpenCL extension 'cl_khr_d3d10_sharing' - ignoring}}
134
135#ifdef cl_khr_context_abort
136#error "Incorrect cl_context_abort define"
137#endif
138#pragma OPENCL EXTENSION cl_khr_context_abort: enable
139// expected-warning@-1{{unsupported OpenCL extension 'cl_khr_context_abort' - ignoring}}
140
141#ifdef cl_khr_d3d11_sharing
142#error "Incorrect cl_khr_d3d11_sharing define"
143#endif
144#pragma OPENCL EXTENSION cl_khr_d3d11_sharing: enable
145// expected-warning@-1{{unsupported OpenCL extension 'cl_khr_d3d11_sharing' - ignoring}}
146
147#ifdef cl_khr_dx9_media_sharing
148#error "Incorrect cl_khr_dx9_media_sharing define"
149#endif
150#pragma OPENCL EXTENSION cl_khr_dx9_media_sharing: enable
151// expected-warning@-1{{unsupported OpenCL extension 'cl_khr_dx9_media_sharing' - ignoring}}
152
153#ifdef cl_khr_image2d_from_buffer
154#error "Incorrect cl_khr_image2d_from_buffer define"
155#endif
156#pragma OPENCL EXTENSION cl_khr_image2d_from_buffer: enable
157// expected-warning@-1{{unsupported OpenCL extension 'cl_khr_image2d_from_buffer' - ignoring}}
158
159#ifdef cl_khr_initialize_memory
160#error "Incorrect cl_khr_initialize_memory define"
161#endif
162#pragma OPENCL EXTENSION cl_khr_initialize_memory: enable
163// expected-warning@-1{{unsupported OpenCL extension 'cl_khr_initialize_memory' - ignoring}}
164
165#ifdef cl_khr_gl_depth_images
166#error "Incorrect cl_khr_gl_depth_images define"
167#endif
168#pragma OPENCL EXTENSION cl_khr_gl_depth_images: enable
169// expected-warning@-1{{unsupported OpenCL extension 'cl_khr_gl_depth_images' - ignoring}}
170
171#ifdef cl_khr_gl_msaa_sharing
172#error "Incorrect cl_khr_gl_msaa_sharing define"
173#endif
174#pragma OPENCL EXTENSION cl_khr_gl_msaa_sharing: enable
175// expected-warning@-1{{unsupported OpenCL extension 'cl_khr_gl_msaa_sharing' - ignoring}}
176
177#ifdef cl_khr_spir
178#error "Incorrect cl_khr_spir define"
179#endif
180#pragma OPENCL EXTENSION cl_khr_spir: enable
181// expected-warning@-1{{unsupported OpenCL extension 'cl_khr_spir' - ignoring}}
182
183#ifdef cl_khr_egl_event
184#error "Incorrect cl_khr_egl_event define"
185#endif
186#pragma OPENCL EXTENSION cl_khr_egl_event: enable
187// expected-warning@-1{{unsupported OpenCL extension 'cl_khr_egl_event' - ignoring}}
188
189#ifdef cl_khr_egl_image
190#error "Missing cl_khr_egl_image define"
191#endif
192#pragma OPENCL EXTENSION cl_khr_egl_image: enable
193// expected-warning@-1{{unsupported OpenCL extension 'cl_khr_egl_image' - ignoring}}
194
195#ifdef cl_khr_srgb_image_writes
196#error "Incorrect cl_khr_srgb_image_writes define"
197#endif
198#pragma OPENCL EXTENSION cl_khr_srgb_image_writes: enable
199// expected-warning@-1{{unsupported OpenCL extension 'cl_khr_srgb_image_writes' - ignoring}}
200
201#ifdef cl_khr_subgroups
202#error "Incorrect cl_khr_subgroups define"
203#endif
204#pragma OPENCL EXTENSION cl_khr_subgroups: enable
205// expected-warning@-1{{unsupported OpenCL extension 'cl_khr_subgroups' - ignoring}}
206
207#ifdef cl_khr_terminate_context
208#error "Incorrect cl_khr_terminate_context define"
209#endif
210#pragma OPENCL EXTENSION cl_khr_terminate_context: enable
211// expected-warning@-1{{unsupported OpenCL extension 'cl_khr_terminate_context' - ignoring}}
212