1// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.6-library -finclude-default-header -verify %s 2// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.6-library -finclude-default-header -fnative-half-type -verify %s 3// expected-no-diagnostics 4 5_Static_assert(__builtin_hlsl_is_intangible(__hlsl_resource_t), ""); 6// no need to check array of __hlsl_resource_t, arrays of sizeless types are not supported 7 8_Static_assert(!__builtin_hlsl_is_intangible(int), ""); 9_Static_assert(!__builtin_hlsl_is_intangible(float3), ""); 10_Static_assert(!__builtin_hlsl_is_intangible(half[4]), ""); 11 12typedef __hlsl_resource_t Res; 13_Static_assert(__builtin_hlsl_is_intangible(const Res), ""); 14// no need to check array of Res, arrays of sizeless types are not supported 15 16struct ABuffer { 17 const int i[10]; 18 __hlsl_resource_t h; 19}; 20_Static_assert(__builtin_hlsl_is_intangible(ABuffer), ""); 21_Static_assert(__builtin_hlsl_is_intangible(ABuffer[10]), ""); 22 23struct MyStruct { 24 half2 h2; 25 int3 i3; 26}; 27_Static_assert(!__builtin_hlsl_is_intangible(MyStruct), ""); 28_Static_assert(!__builtin_hlsl_is_intangible(MyStruct[10]), ""); 29 30class MyClass { 31 int3 ivec; 32 float farray[12]; 33 MyStruct ms; 34 ABuffer buf; 35}; 36_Static_assert(__builtin_hlsl_is_intangible(MyClass), ""); 37_Static_assert(__builtin_hlsl_is_intangible(MyClass[2]), ""); 38 39union U { 40 double d[4]; 41 Res buf; 42}; 43_Static_assert(__builtin_hlsl_is_intangible(U), ""); 44_Static_assert(__builtin_hlsl_is_intangible(U[100]), ""); 45 46class MyClass2 { 47 int3 ivec; 48 float farray[12]; 49 U u; 50}; 51_Static_assert(__builtin_hlsl_is_intangible(MyClass2), ""); 52_Static_assert(__builtin_hlsl_is_intangible(MyClass2[5]), ""); 53 54class Simple { 55 int a; 56}; 57 58template<typename T> struct TemplatedBuffer { 59 T a; 60 __hlsl_resource_t h; 61}; 62_Static_assert(__builtin_hlsl_is_intangible(TemplatedBuffer<int>), ""); 63 64struct MyStruct2 : TemplatedBuffer<float> { 65 float x; 66}; 67_Static_assert(__builtin_hlsl_is_intangible(MyStruct2), ""); 68 69struct MyStruct3 { 70 const TemplatedBuffer<float> TB[10]; 71}; 72_Static_assert(__builtin_hlsl_is_intangible(MyStruct3), ""); 73 74template<typename T> struct SimpleTemplate { 75 T a; 76}; 77_Static_assert(__builtin_hlsl_is_intangible(SimpleTemplate<__hlsl_resource_t>), ""); 78_Static_assert(!__builtin_hlsl_is_intangible(SimpleTemplate<float>), ""); 79 80_Static_assert(__builtin_hlsl_is_intangible(RWBuffer<float>), ""); 81_Static_assert(__builtin_hlsl_is_intangible(StructuredBuffer<Simple>), ""); 82