115 lines · plain
1// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-compute -x hlsl -fsyntax-only -verify %s2 3typedef vector<float, 3> float3;4typedef vector<double, 2> double2;5typedef vector<double, 3> double3;6 7 8// expected-error@+1 {{class template 'RWBuffer' requires template arguments}}9RWBuffer BufferErr1;10 11// expected-error@+1 {{too few template arguments for class template 'RWBuffer'}}12RWBuffer<> BufferErr2;13 14// test implicit RWBuffer concept15RWBuffer<int> r1;16RWBuffer<float> r2;17RWBuffer<float3> Buff;18RWBuffer<double2> r4;19 20// expected-error@+4 {{constraints not satisfied for class template 'RWBuffer'}}21// expected-note@*:* {{template declaration from hidden source: template <typename element_type> requires __is_typed_resource_element_compatible<element_type> class RWBuffer}}22// expected-note@*:* {{because 'RWBuffer<int>' does not satisfy '__is_typed_resource_element_compatible'}}23// expected-note@*:* {{because '__builtin_hlsl_is_typed_resource_element_compatible(hlsl::RWBuffer<int>)' evaluated to false}}24RWBuffer<RWBuffer<int> > r5;25 26struct s {27 int x;28};29 30struct Empty {};31 32template<typename T> struct TemplatedBuffer {33 T a;34};35 36template<typename T> struct TemplatedVector {37 vector<T, 4> v;38};39 40// structs not allowed41// expected-error@+4 {{constraints not satisfied for class template 'RWBuffer'}}42// expected-note@*:* {{template declaration from hidden source: template <typename element_type> requires __is_typed_resource_element_compatible<element_type> class RWBuffer}}43// expected-note@*:* {{because 's' does not satisfy '__is_typed_resource_element_compatible'}}44// expected-note@*:* {{because '__builtin_hlsl_is_typed_resource_element_compatible(s)' evaluated to false}}45RWBuffer<s> r6;46// expected-error@+3 {{constraints not satisfied for class template 'RWBuffer'}}47// expected-note@*:* {{because 'Empty' does not satisfy '__is_typed_resource_element_compatible'}}48// expected-note@*:* {{because '__builtin_hlsl_is_typed_resource_element_compatible(Empty)' evaluated to false}}49RWBuffer<Empty> r7;50 51// expected-error@+3 {{constraints not satisfied for class template 'RWBuffer'}}52// expected-note@*:* {{because 'TemplatedBuffer<int>' does not satisfy '__is_typed_resource_element_compatible'}}53// expected-note@*:* {{because '__builtin_hlsl_is_typed_resource_element_compatible(TemplatedBuffer<int>)' evaluated to false}}54RWBuffer<TemplatedBuffer<int> > r8;55// expected-error@+3 {{constraints not satisfied for class template 'RWBuffer'}}56// expected-note@*:* {{because 'TemplatedVector<int>' does not satisfy '__is_typed_resource_element_compatible'}}57// expected-note@*:* {{because '__builtin_hlsl_is_typed_resource_element_compatible(TemplatedVector<int>)' evaluated to false}}58RWBuffer<TemplatedVector<int> > r9;59 60// arrays not allowed61// expected-error@+3 {{constraints not satisfied for class template 'RWBuffer'}}62// expected-note@*:* {{because 'half[4]' does not satisfy '__is_typed_resource_element_compatible'}}63// expected-note@*:* {{because '__builtin_hlsl_is_typed_resource_element_compatible(half[4])' evaluated to false}}64RWBuffer<half[4]> r10;65 66typedef vector<int, 8> int8;67// expected-error@+3 {{constraints not satisfied for class template 'RWBuffer'}}68// expected-note@*:* {{because 'int8' (aka 'vector<int, 8>') does not satisfy '__is_typed_resource_element_compatible'}}69// expected-note@*:* {{because '__builtin_hlsl_is_typed_resource_element_compatible(vector<int, 8>)' evaluated to false}}70RWBuffer<int8> r11;71 72typedef int MyInt;73RWBuffer<MyInt> r12;74 75// expected-error@+3 {{constraints not satisfied for class template 'RWBuffer'}}76// expected-note@*:* {{because 'bool' does not satisfy '__is_typed_resource_element_compatible'}}77// expected-note@*:* {{because '__builtin_hlsl_is_typed_resource_element_compatible(bool)' evaluated to false}}78RWBuffer<bool> r13;79 80// expected-error@+3 {{constraints not satisfied for class template 'RWBuffer'}}81// expected-note@*:* {{because 'vector<bool, 2>' (vector of 2 'bool' values) does not satisfy '__is_typed_resource_element_compatible'}}82// expected-note@*:* {{because '__builtin_hlsl_is_typed_resource_element_compatible(vector<bool, 2>)' evaluated to false}}83RWBuffer<vector<bool, 2>> r14;84 85enum numbers { one, two, three };86 87// expected-error@+3 {{constraints not satisfied for class template 'RWBuffer'}}88// expected-note@*:* {{because 'numbers' does not satisfy '__is_typed_resource_element_compatible'}}89// expected-note@*:* {{because '__builtin_hlsl_is_typed_resource_element_compatible(numbers)' evaluated to false}}90RWBuffer<numbers> r15;91 92// expected-error@+3 {{constraints not satisfied for class template 'RWBuffer'}}93// expected-note@*:* {{because 'double3' (aka 'vector<double, 3>') does not satisfy '__is_typed_resource_element_compatible'}}94// expected-note@*:* {{because '__builtin_hlsl_is_typed_resource_element_compatible(vector<double, 3>)' evaluated to false}}95RWBuffer<double3> r16;96 97 98struct threeDoubles {99 double a;100 double b;101 double c;102};103 104// expected-error@+3 {{constraints not satisfied for class template 'RWBuffer'}}105// expected-note@*:* {{because 'threeDoubles' does not satisfy '__is_typed_resource_element_compatible'}}106// expected-note@*:* {{because '__builtin_hlsl_is_typed_resource_element_compatible(threeDoubles)' evaluated to false}}107RWBuffer<threeDoubles> BufferErr3;108 109 110[numthreads(1,1,1)]111void main() {112 (void)Buff.__handle; // expected-error {{'__handle' is a private member of 'hlsl::RWBuffer<vector<float, 3>>'}}113 // expected-note@* {{implicitly declared private here}}114}115