xref: /llvm-project/clang/test/SemaHLSL/Types/Traits/IsIntangibleType.hlsl (revision b55c52c047a167f42abbde9a33356cfb96b82c7f)
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