1// RUN: %clang_cc1 -x cl -cl-std=CL %s -verify -triple spir-unknown-unknown 2// RUN: %clang_cc1 -x cl -cl-std=CL1.1 %s -verify -triple spir-unknown-unknown 3// RUN: %clang_cc1 -x cl -cl-std=CL1.2 %s -verify -triple spir-unknown-unknown 4// RUN: %clang_cc1 -x cl -cl-std=CL2.0 %s -verify -triple spir-unknown-unknown 5// RUN: %clang_cc1 -x cl -cl-std=clc++ %s -verify -triple spir-unknown-unknown 6// RUN: %clang_cc1 -x cl -cl-std=CL3.0 %s -verify -triple spir-unknown-unknown 7// RUN: %clang_cc1 -x cl -cl-std=CL %s -verify -triple spir-unknown-unknown -Wpedantic-core-features -DTEST_CORE_FEATURES 8// RUN: %clang_cc1 -x cl -cl-std=CL1.1 %s -verify -triple spir-unknown-unknown -Wpedantic-core-features -DTEST_CORE_FEATURES 9// RUN: %clang_cc1 -x cl -cl-std=CL1.2 %s -verify -triple spir-unknown-unknown -Wpedantic-core-features -DTEST_CORE_FEATURES 10// RUN: %clang_cc1 -x cl -cl-std=CL2.0 %s -verify -triple spir-unknown-unknown -Wpedantic-core-features -DTEST_CORE_FEATURES 11// RUN: %clang_cc1 -x cl -cl-std=clc++ %s -verify -triple spir-unknown-unknown -Wpedantic-core-features -DTEST_CORE_FEATURES 12// RUN: %clang_cc1 -x cl -cl-std=CL3.0 %s -verify -triple spir-unknown-unknown -Wpedantic-core-features -DTEST_CORE_FEATURES 13 14// Extensions in all versions 15#ifndef cl_clang_storage_class_specifiers 16#error "Missing cl_clang_storage_class_specifiers define" 17#endif 18#pragma OPENCL EXTENSION cl_clang_storage_class_specifiers : enable 19 20#ifndef __cl_clang_function_pointers 21#error "Missing __cl_clang_function_pointers define" 22#endif 23#pragma OPENCL EXTENSION __cl_clang_function_pointers : enable 24 25#ifndef __cl_clang_variadic_functions 26#error "Missing __cl_clang_variadic_functions define" 27#endif 28#pragma OPENCL EXTENSION __cl_clang_variadic_functions : enable 29 30#ifndef cl_khr_fp16 31#error "Missing cl_khr_fp16 define" 32#endif 33#pragma OPENCL EXTENSION cl_khr_fp16: enable 34 35#ifndef cl_khr_int64_base_atomics 36#error "Missing cl_khr_int64_base_atomics define" 37#endif 38#pragma OPENCL EXTENSION cl_khr_int64_base_atomics: enable 39 40#ifndef cl_khr_int64_extended_atomics 41#error "Missing cl_khr_int64_extended_atomics define" 42#endif 43#pragma OPENCL EXTENSION cl_khr_int64_extended_atomics: enable 44 45// Core features in CL 1.1 46 47#ifndef cl_khr_byte_addressable_store 48#error "Missing cl_khr_byte_addressable_store define" 49#endif 50#pragma OPENCL EXTENSION cl_khr_byte_addressable_store : enable 51#if (defined(__OPENCL_CPP_VERSION__) || __OPENCL_C_VERSION__ >= 110) && defined TEST_CORE_FEATURES 52// expected-warning@-2{{OpenCL extension 'cl_khr_byte_addressable_store' is core feature or supported optional core feature - ignoring}} 53#endif 54 55#ifndef cl_khr_global_int32_base_atomics 56#error "Missing cl_khr_global_int32_base_atomics define" 57#endif 58#pragma OPENCL EXTENSION cl_khr_global_int32_base_atomics : enable 59#if (defined(__OPENCL_CPP_VERSION__) || __OPENCL_C_VERSION__ >= 110) && defined TEST_CORE_FEATURES 60// expected-warning@-2{{OpenCL extension 'cl_khr_global_int32_base_atomics' is core feature or supported optional core feature - ignoring}} 61#endif 62 63#ifndef cl_khr_global_int32_extended_atomics 64#error "Missing cl_khr_global_int32_extended_atomics define" 65#endif 66#pragma OPENCL EXTENSION cl_khr_global_int32_extended_atomics : enable 67#if (defined(__OPENCL_CPP_VERSION__) || __OPENCL_C_VERSION__ >= 110) && defined TEST_CORE_FEATURES 68// expected-warning@-2{{OpenCL extension 'cl_khr_global_int32_extended_atomics' is core feature or supported optional core feature - ignoring}} 69#endif 70 71#ifndef cl_khr_local_int32_base_atomics 72#error "Missing cl_khr_local_int32_base_atomics define" 73#endif 74#pragma OPENCL EXTENSION cl_khr_local_int32_base_atomics : enable 75#if (defined(__OPENCL_CPP_VERSION__) || __OPENCL_C_VERSION__ >= 110) && defined TEST_CORE_FEATURES 76// expected-warning@-2{{OpenCL extension 'cl_khr_local_int32_base_atomics' is core feature or supported optional core feature - ignoring}} 77#endif 78 79#ifndef cl_khr_local_int32_extended_atomics 80#error "Missing cl_khr_local_int32_extended_atomics define" 81#endif 82#pragma OPENCL EXTENSION cl_khr_local_int32_extended_atomics : enable 83#if (defined(__OPENCL_CPP_VERSION__) || __OPENCL_C_VERSION__ >= 110) && defined TEST_CORE_FEATURES 84// expected-warning@-2{{OpenCL extension 'cl_khr_local_int32_extended_atomics' is core feature or supported optional core feature - ignoring}} 85#endif 86 87// Core feature in CL 1.2 88#ifndef cl_khr_fp64 89#error "Missing cl_khr_fp64 define" 90#endif 91#pragma OPENCL EXTENSION cl_khr_fp64 : enable 92#if (defined(__OPENCL_CPP_VERSION__) || __OPENCL_C_VERSION__ >= 120) && defined TEST_CORE_FEATURES 93// expected-warning@-2{{OpenCL extension 'cl_khr_fp64' is core feature or supported optional core feature - ignoring}} 94#endif 95 96//Core feature in CL 2.0, optional core feature in CL 3.0 97#ifndef cl_khr_3d_image_writes 98#error "Missing cl_khr_3d_image_writes define" 99#endif 100#pragma OPENCL EXTENSION cl_khr_3d_image_writes : enable 101#if (defined(__OPENCL_CPP_VERSION__) || __OPENCL_C_VERSION__ == 200 || __OPENCL_C_VERSION__ == 300) && defined TEST_CORE_FEATURES 102// expected-warning@-2{{OpenCL extension 'cl_khr_3d_image_writes' is core feature or supported optional core feature - ignoring}} 103#endif 104 105#if (defined(__OPENCL_CPP_VERSION__) || __OPENCL_C_VERSION__ >= 110) 106#ifndef cles_khr_int64 107#error "Missing cles_khr_int64 define" 108#endif 109#else 110// expected-warning@+2{{unsupported OpenCL extension 'cles_khr_int64' - ignoring}} 111#endif 112#pragma OPENCL EXTENSION cles_khr_int64 : enable 113 114#if (defined(__OPENCL_CPP_VERSION__) || __OPENCL_C_VERSION__ >= 120) 115#ifndef cl_khr_gl_msaa_sharing 116#error "Missing cl_khr_gl_msaa_sharing define" 117#endif 118#else 119// expected-warning@+2{{unsupported OpenCL extension 'cl_khr_gl_msaa_sharing' - ignoring}} 120#endif 121#pragma OPENCL EXTENSION cl_khr_gl_msaa_sharing : enable 122 123#if (defined(__OPENCL_CPP_VERSION__) || __OPENCL_C_VERSION__ >= 200) 124#ifndef cl_khr_mipmap_image 125#error "Missing cl_khr_mipmap_image define" 126#endif 127#else 128#ifdef cl_khr_mipmap_image 129#error "Incorrect cl_khr_mipmap_image define" 130#endif 131// expected-warning@+2{{unsupported OpenCL extension 'cl_khr_mipmap_image' - ignoring}} 132#endif 133#pragma OPENCL EXTENSION cl_khr_mipmap_image : enable 134 135#if (defined(__OPENCL_CPP_VERSION__) || __OPENCL_C_VERSION__ >= 200) 136#ifndef cl_khr_mipmap_image_writes 137#error "Missing cl_khr_mipmap_image_writes define" 138#endif 139#else 140#ifdef cl_khr_mipmap_image_writes 141#error "Incorrect cl_khr_mipmap_image_writes define" 142#endif 143// expected-warning@+2{{unsupported OpenCL extension 'cl_khr_mipmap_image_writes' - ignoring}} 144#endif 145#pragma OPENCL EXTENSION cl_khr_mipmap_image_writes : enable 146 147#if (defined(__OPENCL_CPP_VERSION__) || __OPENCL_C_VERSION__ >= 200) 148#ifndef cl_khr_srgb_image_writes 149#error "Missing cl_khr_srgb_image_writes define" 150#endif 151#else 152// expected-warning@+2{{unsupported OpenCL extension 'cl_khr_srgb_image_writes' - ignoring}} 153#endif 154#pragma OPENCL EXTENSION cl_khr_srgb_image_writes : enable 155 156#if (defined(__OPENCL_CPP_VERSION__) || __OPENCL_C_VERSION__ >= 200) 157#ifndef cl_khr_subgroups 158#error "Missing cl_khr_subgroups define" 159#endif 160#else 161#ifdef cl_khr_subgroups 162#error "Incorrect cl_khr_subgroups define" 163#endif 164// expected-warning@+2{{unsupported OpenCL extension 'cl_khr_subgroups' - ignoring}} 165#endif 166#pragma OPENCL EXTENSION cl_khr_subgroups : enable 167 168#ifndef cl_amd_media_ops 169#error "Missing cl_amd_media_ops define" 170#endif 171#pragma OPENCL EXTENSION cl_amd_media_ops: enable 172 173#ifndef cl_amd_media_ops2 174#error "Missing cl_amd_media_ops2 define" 175#endif 176#pragma OPENCL EXTENSION cl_amd_media_ops2 : enable 177 178#if (defined(__OPENCL_CPP_VERSION__) || __OPENCL_C_VERSION__ >= 120) 179#ifndef cl_khr_depth_images 180#error "Missing cl_khr_depth_images define" 181#endif 182#else 183#ifdef cl_khr_depth_images 184#error "Incorrect cl_khr_depth_images define" 185#endif 186// expected-warning@+2{{unsupported OpenCL extension 'cl_khr_depth_images' - ignoring}} 187#endif 188#pragma OPENCL EXTENSION cl_khr_depth_images : enable 189 190#if (defined(__OPENCL_CPP_VERSION__) || __OPENCL_C_VERSION__ >= 120) 191#ifndef cl_intel_subgroups 192#error "Missing cl_intel_subgroups define" 193#endif 194#else 195// expected-warning@+2{{unsupported OpenCL extension 'cl_intel_subgroups' - ignoring}} 196#endif 197#pragma OPENCL EXTENSION cl_intel_subgroups : enable 198 199#if (defined(__OPENCL_CPP_VERSION__) || __OPENCL_C_VERSION__ >= 120) 200#ifndef cl_intel_subgroups_short 201#error "Missing cl_intel_subgroups_short define" 202#endif 203#else 204// expected-warning@+2{{unsupported OpenCL extension 'cl_intel_subgroups_short' - ignoring}} 205#endif 206#pragma OPENCL EXTENSION cl_intel_subgroups_short : enable 207 208#if (defined(__OPENCL_CPP_VERSION__) || __OPENCL_C_VERSION__ >= 120) 209#ifndef cl_intel_device_side_avc_motion_estimation 210#error "Missing cl_intel_device_side_avc_motion_estimation define" 211#endif 212#else 213// expected-warning@+2{{unsupported OpenCL extension 'cl_intel_device_side_avc_motion_estimation' - ignoring}} 214#endif 215#pragma OPENCL EXTENSION cl_intel_device_side_avc_motion_estimation : enable 216 217// Check that pragmas for the OpenCL 3.0 features are rejected. 218 219#pragma OPENCL EXTENSION __opencl_c_int64 : disable 220//expected-warning@-1{{unknown OpenCL extension '__opencl_c_int64' - ignoring}} 221#pragma OPENCL EXTENSION __opencl_c_3d_image_writes : disable 222//expected-warning@-1{{unknown OpenCL extension '__opencl_c_3d_image_writes' - ignoring}} 223#pragma OPENCL EXTENSION __opencl_c_atomic_order_acq_rel : disable 224//expected-warning@-1{{unknown OpenCL extension '__opencl_c_atomic_order_acq_rel' - ignoring}} 225#pragma OPENCL EXTENSION __opencl_c_atomic_order_seq_cst : disable 226//expected-warning@-1{{unknown OpenCL extension '__opencl_c_atomic_order_seq_cst' - ignoring}} 227#pragma OPENCL EXTENSION __opencl_c_device_enqueue : disable 228//expected-warning@-1{{unknown OpenCL extension '__opencl_c_device_enqueue' - ignoring}} 229#pragma OPENCL EXTENSION __opencl_c_fp64 : disable 230//expected-warning@-1{{unknown OpenCL extension '__opencl_c_fp64' - ignoring}} 231#pragma OPENCL EXTENSION __opencl_c_generic_address_space : disable 232//expected-warning@-1{{unknown OpenCL extension '__opencl_c_generic_address_space' - ignoring}} 233#pragma OPENCL EXTENSION __opencl_c_images : disable 234//expected-warning@-1{{unknown OpenCL extension '__opencl_c_images' - ignoring}} 235#pragma OPENCL EXTENSION __opencl_c_pipes : disable 236//expected-warning@-1{{unknown OpenCL extension '__opencl_c_pipes' - ignoring}} 237#pragma OPENCL EXTENSION __opencl_c_program_scope_global_variables : disable 238//expected-warning@-1{{unknown OpenCL extension '__opencl_c_program_scope_global_variables' - ignoring}} 239#pragma OPENCL EXTENSION __opencl_c_read_write_images : disable 240//expected-warning@-1{{unknown OpenCL extension '__opencl_c_read_write_images' - ignoring}} 241#pragma OPENCL EXTENSION __opencl_c_subgroups : disable 242//expected-warning@-1{{unknown OpenCL extension '__opencl_c_subgroups' - ignoring}} 243 244#pragma OPENCL EXTENSION __opencl_c_int64 : enable 245//expected-warning@-1{{unknown OpenCL extension '__opencl_c_int64' - ignoring}} 246#pragma OPENCL EXTENSION __opencl_c_3d_image_writes : enable 247//expected-warning@-1{{unknown OpenCL extension '__opencl_c_3d_image_writes' - ignoring}} 248#pragma OPENCL EXTENSION __opencl_c_atomic_order_acq_rel : enable 249//expected-warning@-1{{unknown OpenCL extension '__opencl_c_atomic_order_acq_rel' - ignoring}} 250#pragma OPENCL EXTENSION __opencl_c_atomic_order_seq_cst : enable 251//expected-warning@-1{{unknown OpenCL extension '__opencl_c_atomic_order_seq_cst' - ignoring}} 252#pragma OPENCL EXTENSION __opencl_c_device_enqueue : enable 253//expected-warning@-1{{unknown OpenCL extension '__opencl_c_device_enqueue' - ignoring}} 254#pragma OPENCL EXTENSION __opencl_c_fp64 : enable 255//expected-warning@-1{{unknown OpenCL extension '__opencl_c_fp64' - ignoring}} 256#pragma OPENCL EXTENSION __opencl_c_generic_address_space : enable 257//expected-warning@-1{{unknown OpenCL extension '__opencl_c_generic_address_space' - ignoring}} 258#pragma OPENCL EXTENSION __opencl_c_images : enable 259//expected-warning@-1{{unknown OpenCL extension '__opencl_c_images' - ignoring}} 260#pragma OPENCL EXTENSION __opencl_c_pipes : enable 261//expected-warning@-1{{unknown OpenCL extension '__opencl_c_pipes' - ignoring}} 262#pragma OPENCL EXTENSION __opencl_c_program_scope_global_variables : enable 263//expected-warning@-1{{unknown OpenCL extension '__opencl_c_program_scope_global_variables' - ignoring}} 264#pragma OPENCL EXTENSION __opencl_c_read_write_images : enable 265//expected-warning@-1{{unknown OpenCL extension '__opencl_c_read_write_images' - ignoring}} 266#pragma OPENCL EXTENSION __opencl_c_subgroups : enable 267//expected-warning@-1{{unknown OpenCL extension '__opencl_c_subgroups' - ignoring}} 268