|
| 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 | + |
| 12 | +typedef __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 | + |
| 16 | +struct 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 | + |
| 23 | +struct 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 | + |
| 30 | +class 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 | + |
| 39 | +union 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 | + |
| 46 | +class 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 | + |
| 54 | +class Simple { |
| 55 | + int a; |
| 56 | +}; |
| 57 | + |
| 58 | +template<typename T> struct TemplatedBuffer { |
| 59 | + T a; |
| 60 | + __hlsl_resource_t h; |
| 61 | +}; |
| 62 | +_Static_assert(__builtin_hlsl_is_intangible(TemplatedBuffer<int>), ""); |
| 63 | + |
| 64 | +struct MyStruct2 : TemplatedBuffer<float> { |
| 65 | + float x; |
| 66 | +}; |
| 67 | +_Static_assert(__builtin_hlsl_is_intangible(MyStruct2), ""); |
| 68 | + |
| 69 | +struct MyStruct3 { |
| 70 | + const TemplatedBuffer<float> TB[10]; |
| 71 | +}; |
| 72 | +_Static_assert(__builtin_hlsl_is_intangible(MyStruct3), ""); |
| 73 | + |
| 74 | +template<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>), ""); |
0 commit comments