blob: 8473fa33631a1c2f568b7e92262e3c172bd31c95 [file] [log] [blame]
Guy Benyei61054192013-02-07 10:55:47 +00001// RUN: %clang_cc1 %s -verify -pedantic -fsyntax-only
Yaxun Liu0bc4b2d2016-07-28 19:26:30 +00002// RUN: %clang_cc1 %s -verify -pedantic -fsyntax-only -DCHECK_SAMPLER_VALUE -Wspir-compat -triple amdgcn--amdhsa
3// RUN: %clang_cc1 %s -verify -pedantic -fsyntax-only -DCHECK_SAMPLER_VALUE -triple spir-unknown-unknown
Guy Benyei61054192013-02-07 10:55:47 +00004
Yaxun Liu0bc4b2d2016-07-28 19:26:30 +00005#define CLK_ADDRESS_CLAMP_TO_EDGE 2
6#define CLK_NORMALIZED_COORDS_TRUE 1
7#define CLK_FILTER_NEAREST 0x10
8#define CLK_FILTER_LINEAR 0x20
9
10constant sampler_t glb_smp = CLK_ADDRESS_CLAMP_TO_EDGE | CLK_NORMALIZED_COORDS_TRUE | CLK_FILTER_LINEAR;
11constant sampler_t glb_smp2; // expected-error{{variable in constant address space must be initialized}}
Sven van Haastregt511f0b82017-05-08 09:29:06 +000012global sampler_t glb_smp3 = CLK_ADDRESS_CLAMP_TO_EDGE | CLK_NORMALIZED_COORDS_TRUE | CLK_FILTER_NEAREST; // expected-error{{sampler type cannot be used with the __local and __global address space qualifiers}} expected-error {{global sampler requires a const or constant address space qualifier}}
13const global sampler_t glb_smp3_const = CLK_ADDRESS_CLAMP_TO_EDGE | CLK_NORMALIZED_COORDS_TRUE | CLK_FILTER_LINEAR; // expected-error{{sampler type cannot be used with the __local and __global address space qualifiers}}
Yaxun Liu0bc4b2d2016-07-28 19:26:30 +000014
15constant sampler_t glb_smp4 = 0;
16#ifdef CHECK_SAMPLER_VALUE
17// expected-warning@-2{{sampler initializer has invalid Filter Mode bits}}
18#endif
19
20constant sampler_t glb_smp5 = 0x1f;
21#ifdef CHECK_SAMPLER_VALUE
22// expected-warning@-2{{sampler initializer has invalid Addressing Mode bits}}
23#endif
24
25constant sampler_t glb_smp6 = glb_smp; // expected-error{{initializer element is not a compile-time constant}}
26
27int f(void);
28constant sampler_t glb_smp7 = f(); // expected-error{{initializer element is not a compile-time constant}}
29
30constant sampler_t glb_smp8 = 1.0f; // expected-error{{initializing '__constant sampler_t' with an expression of incompatible type 'float'}}
31
32constant sampler_t glb_smp9 = 0x100000000LL; // expected-error{{sampler_t initialization requires 32-bit integer, not 'long long'}}
Guy Benyei61054192013-02-07 10:55:47 +000033
Egor Churaeva8d24512017-04-05 09:02:56 +000034void foo(sampler_t); // expected-note{{passing argument to parameter here}}
Anastasia Stulova1f95cc02016-03-03 13:33:19 +000035
Sven van Haastregt22d57d92018-08-14 13:56:52 +000036void constant_sampler(constant sampler_t s); // expected-error{{parameter may not be qualified with an address space}}
37
Anastasia Stulova1f95cc02016-03-03 13:33:19 +000038constant struct sampler_s {
Anastasia Stulova4d850032016-07-11 13:46:02 +000039 sampler_t smp; // expected-error{{the 'sampler_t' type cannot be used to declare a structure or union field}}
Anastasia Stulova1f95cc02016-03-03 13:33:19 +000040} sampler_str = {0};
Guy Benyei61054192013-02-07 10:55:47 +000041
Yaxun Liu0bc4b2d2016-07-28 19:26:30 +000042sampler_t bad(void); //expected-error{{declaring function return value of type 'sampler_t' is not allowed}}
43
Sven van Haastregt511f0b82017-05-08 09:29:06 +000044sampler_t global_nonconst_smp = 0; // expected-error {{global sampler requires a const or constant address space qualifier}}
45
46const sampler_t glb_smp10 = CLK_ADDRESS_CLAMP_TO_EDGE | CLK_NORMALIZED_COORDS_TRUE | CLK_FILTER_LINEAR;
47const constant sampler_t glb_smp11 = CLK_ADDRESS_CLAMP_TO_EDGE | CLK_NORMALIZED_COORDS_TRUE | CLK_FILTER_LINEAR;
48
Guy Benyei61054192013-02-07 10:55:47 +000049void kernel ker(sampler_t argsmp) {
Anastasia Stulova4d850032016-07-11 13:46:02 +000050 local sampler_t smp; // expected-error{{sampler type cannot be used with the __local and __global address space qualifiers}}
Yaxun Liu0bc4b2d2016-07-28 19:26:30 +000051 const sampler_t const_smp5 = 1.0f; // expected-error{{initializing 'const sampler_t' with an expression of incompatible type 'float'}}
52 const sampler_t const_smp6 = 0x100000000LL; // expected-error{{sampler_t initialization requires 32-bit integer, not 'long long'}}
53
Egor Churaeva8d24512017-04-05 09:02:56 +000054 foo(5.0f); // expected-error {{passing 'float' to parameter of incompatible type 'sampler_t'}}
Alexey Baderbed40092017-11-15 11:38:17 +000055 sampler_t sa[] = {argsmp, glb_smp}; // expected-error {{array of 'sampler_t' type is invalid in OpenCL}}
Guy Benyei61054192013-02-07 10:55:47 +000056}
Xiuli Pan379554a2016-02-25 03:34:20 +000057
Anastasia Stulova4d850032016-07-11 13:46:02 +000058void bad(sampler_t*); // expected-error{{pointer to type 'sampler_t' is invalid in OpenCL}}
59
60void bar() {
Yaxun Liu0bc4b2d2016-07-28 19:26:30 +000061 sampler_t smp1 = CLK_ADDRESS_CLAMP_TO_EDGE | CLK_NORMALIZED_COORDS_TRUE | CLK_FILTER_LINEAR;
62 sampler_t smp2 = CLK_ADDRESS_CLAMP_TO_EDGE | CLK_NORMALIZED_COORDS_TRUE | CLK_FILTER_NEAREST;
Anastasia Stulova4d850032016-07-11 13:46:02 +000063 smp1=smp2; //expected-error{{invalid operands to binary expression ('sampler_t' and 'sampler_t')}}
64 smp1+1; //expected-error{{invalid operands to binary expression ('sampler_t' and 'int')}}
65 &smp1; //expected-error{{invalid argument type 'sampler_t' to unary expression}}
66 *smp2; //expected-error{{invalid argument type 'sampler_t' to unary expression}}
Yaxun Liu0bc4b2d2016-07-28 19:26:30 +000067 foo(smp1+1); //expected-error{{invalid operands to binary expression ('sampler_t' and 'int')}}
Anastasia Stulova4d850032016-07-11 13:46:02 +000068}
69