17c77b536SSven van Haastregt// RUN: %clang_cc1 %s -verify -cl-std=CL1.1 -triple x86_64-unknown-linux-gnu 27c77b536SSven van Haastregt// RUN: %clang_cc1 %s -verify -cl-std=CL1.2 -triple x86_64-unknown-linux-gnu 37c77b536SSven van Haastregt// RUN: %clang_cc1 %s -verify -cl-std=CL2.0 -triple x86_64-unknown-linux-gnu 47c77b536SSven van Haastregt 57c77b536SSven van Haastregt#pragma OPENCL EXTENSION cl_khr_fp64 : enable 67c77b536SSven van Haastregt 77c77b536SSven van Haastregttypedef __attribute__((ext_vector_type(4))) float float4; 87c77b536SSven van Haastregttypedef __attribute__((ext_vector_type(4))) double double4; 97c77b536SSven van Haastregttypedef __attribute__((ext_vector_type(4))) int int4; 107c77b536SSven van Haastregttypedef __attribute__((ext_vector_type(4))) long long4; 117c77b536SSven van Haastregt 127c77b536SSven van Haastregtkernel void float_ops() { 137c77b536SSven van Haastregt int flaf = 0.0f && 0.0f; 147c77b536SSven van Haastregt#if __OPENCL_C_VERSION__ < 120 157c77b536SSven van Haastregt// expected-error@-2{{invalid operands}} 167c77b536SSven van Haastregt#endif 177c77b536SSven van Haastregt int flof = 0.0f || 0.0f; 187c77b536SSven van Haastregt#if __OPENCL_C_VERSION__ < 120 197c77b536SSven van Haastregt// expected-error@-2{{invalid operands}} 207c77b536SSven van Haastregt#endif 217c77b536SSven van Haastregt float fbaf = 0.0f & 0.0f; // expected-error {{invalid operands}} 227c77b536SSven van Haastregt float fbof = 0.0f | 0.0f; // expected-error {{invalid operands}} 237c77b536SSven van Haastregt float fbxf = 0.0f ^ 0.0f; // expected-error {{invalid operands}} 247c77b536SSven van Haastregt int flai = 0.0f && 0; 257c77b536SSven van Haastregt#if __OPENCL_C_VERSION__ < 120 267c77b536SSven van Haastregt// expected-error@-2{{invalid operands}} 277c77b536SSven van Haastregt#endif 287c77b536SSven van Haastregt int floi = 0.0f || 0; 297c77b536SSven van Haastregt#if __OPENCL_C_VERSION__ < 120 307c77b536SSven van Haastregt// expected-error@-2{{invalid operands}} 317c77b536SSven van Haastregt#endif 327c77b536SSven van Haastregt float ibaf = 0 & 0.0f; // expected-error {{invalid operands to binary expression ('int' and 'float')}} 337c77b536SSven van Haastregt float ibof = 0 | 0.0f; // expected-error {{invalid operands}} 347c77b536SSven van Haastregt float bnf = ~0.0f;// expected-error {{invalid argument type}} 357c77b536SSven van Haastregt float lnf = !0.0f; 367c77b536SSven van Haastregt#if __OPENCL_C_VERSION__ < 120 377c77b536SSven van Haastregt// expected-error@-2{{invalid argument type}} 387c77b536SSven van Haastregt#endif 397c77b536SSven van Haastregt float fcst = 5.5f; 407c77b536SSven van Haastregt float fremainder = fcst % 2.0f; // expected-error {{invalid operands to binary expression}} 417c77b536SSven van Haastregt} 427c77b536SSven van Haastregt 437c77b536SSven van Haastregtkernel void vec_float_ops() { 447c77b536SSven van Haastregt float4 f4 = (float4)(0, 0, 0, 0); 457c77b536SSven van Haastregt int4 f4laf = f4 && 0.0f; 467c77b536SSven van Haastregt#if __OPENCL_C_VERSION__ < 120 477c77b536SSven van Haastregt// expected-error@-2{{invalid operands}} 487c77b536SSven van Haastregt#endif 497c77b536SSven van Haastregt int4 f4lof = f4 || 0.0f; 507c77b536SSven van Haastregt#if __OPENCL_C_VERSION__ < 120 517c77b536SSven van Haastregt// expected-error@-2{{invalid operands}} 527c77b536SSven van Haastregt#endif 537c77b536SSven van Haastregt float4 f4baf = f4 & 0.0f; // expected-error {{invalid operands}} 547c77b536SSven van Haastregt float4 f4bof = f4 | 0.0f; // expected-error {{invalid operands}} 557c77b536SSven van Haastregt float4 f4bxf = f4 ^ 0.0f; // expected-error {{invalid operands}} 567c77b536SSven van Haastregt float bnf4 = ~f4; // expected-error {{invalid argument type}} 577c77b536SSven van Haastregt int4 lnf4 = !f4; 587c77b536SSven van Haastregt#if __OPENCL_C_VERSION__ < 120 597c77b536SSven van Haastregt// expected-error@-2{{invalid argument type}} 607c77b536SSven van Haastregt#endif 617c77b536SSven van Haastregt float4 f4cst = (float4)(5.5f, 5.5f, 5.5f, 5.5f); 627c77b536SSven van Haastregt float4 f4remainder = f4cst % (float4)(2.0f, 2.0f, 2.0f, 2.0f); // expected-error {{invalid operands to binary expression}} 637c77b536SSven van Haastregt} 647c77b536SSven van Haastregt 657c77b536SSven van Haastregtkernel void double_ops() { 667c77b536SSven van Haastregt int flaf = 0.0 && 0.0; 677c77b536SSven van Haastregt#if __OPENCL_C_VERSION__ < 120 687c77b536SSven van Haastregt// expected-error@-2{{invalid operands}} 697c77b536SSven van Haastregt#endif 707c77b536SSven van Haastregt int flof = 0.0 || 0.0; 717c77b536SSven van Haastregt#if __OPENCL_C_VERSION__ < 120 727c77b536SSven van Haastregt// expected-error@-2{{invalid operands}} 737c77b536SSven van Haastregt#endif 747c77b536SSven van Haastregt double fbaf = 0.0 & 0.0; // expected-error {{invalid operands}} 757c77b536SSven van Haastregt double fbof = 0.0 | 0.0; // expected-error {{invalid operands}} 767c77b536SSven van Haastregt double fbxf = 0.0 ^ 0.0; // expected-error {{invalid operands}} 777c77b536SSven van Haastregt int flai = 0.0 && 0; 787c77b536SSven van Haastregt#if __OPENCL_C_VERSION__ < 120 797c77b536SSven van Haastregt// expected-error@-2{{invalid operands}} 807c77b536SSven van Haastregt#endif 817c77b536SSven van Haastregt int floi = 0.0 || 0; 827c77b536SSven van Haastregt#if __OPENCL_C_VERSION__ < 120 837c77b536SSven van Haastregt// expected-error@-2{{invalid operands}} 847c77b536SSven van Haastregt#endif 857c77b536SSven van Haastregt double ibaf = 0 & 0.0; // expected-error {{invalid operands}} 867c77b536SSven van Haastregt double ibof = 0 | 0.0; // expected-error {{invalid operands}} 877c77b536SSven van Haastregt double bnf = ~0.0; // expected-error {{invalid argument type}} 887c77b536SSven van Haastregt double lnf = !0.0; 897c77b536SSven van Haastregt#if __OPENCL_C_VERSION__ < 120 907c77b536SSven van Haastregt// expected-error@-2{{invalid argument type}} 917c77b536SSven van Haastregt#endif 927c77b536SSven van Haastregt double dcst = 5.5; 937c77b536SSven van Haastregt double dremainder = dcst % 2.0; // expected-error {{invalid operands to binary expression}} 947c77b536SSven van Haastregt} 957c77b536SSven van Haastregt 967c77b536SSven van Haastregtkernel void vec_double_ops() { 977c77b536SSven van Haastregt double4 f4 = (double4)(0, 0, 0, 0); 987c77b536SSven van Haastregt long4 f4laf = f4 && 0.0; 997c77b536SSven van Haastregt#if __OPENCL_C_VERSION__ < 120 1007c77b536SSven van Haastregt// expected-error@-2{{invalid operands}} 1017c77b536SSven van Haastregt#endif 1027c77b536SSven van Haastregt long4 f4lof = f4 || 0.0; 1037c77b536SSven van Haastregt#if __OPENCL_C_VERSION__ < 120 1047c77b536SSven van Haastregt// expected-error@-2{{invalid operands}} 1057c77b536SSven van Haastregt#endif 1067c77b536SSven van Haastregt double4 f4baf = f4 & 0.0; // expected-error {{invalid operands}} 1077c77b536SSven van Haastregt double4 f4bof = f4 | 0.0; // expected-error {{invalid operands}} 1087c77b536SSven van Haastregt double4 f4bxf = f4 ^ 0.0; // expected-error {{invalid operands}} 1097c77b536SSven van Haastregt double bnf4 = ~f4; // expected-error {{invalid argument type}} 1107c77b536SSven van Haastregt long4 lnf4 = !f4; 1117c77b536SSven van Haastregt#if __OPENCL_C_VERSION__ < 120 1127c77b536SSven van Haastregt// expected-error@-2{{invalid argument type}} 1137c77b536SSven van Haastregt#endif 1147c77b536SSven van Haastregt} 1157c77b536SSven van Haastregt 1167c77b536SSven van Haastregtkernel void pointer_ops(){ 1177c77b536SSven van Haastregt global int* p; 1187c77b536SSven van Haastregt bool b = !p; 1197c77b536SSven van Haastregt b = p==0; 1207c77b536SSven van Haastregt int i; 121*8697bbe2SMariya Podchishchaeva b = !&i; // expected-warning {{address of 'i' will always evaluate to 'true'}} 1227c77b536SSven van Haastregt b = &i==(int *)1; 1237c77b536SSven van Haastregt} 124