[RISCV][FMV] Support target_clones (#85786)
[llvm-project.git] / clang / test / SemaHLSL / resource_binding_attr_error.hlsl
blobcb728dca838c3b12579d2f09f9c6eb9272ec1254
1 // RUN: %clang_cc1 -triple dxil-pc-shadermodel6.3-library -x hlsl -o - -fsyntax-only %s -verify
3 template<typename T>
4 struct MyTemplatedSRV {
5   __hlsl_resource_t [[hlsl::resource_class(SRV)]] x;
6 };
8 // valid, The register keyword in this statement isn't binding a resource, rather it is
9 // specifying a constant register binding offset within the $Globals cbuffer, which is legacy behavior from DX9.
10 float a : register(c0);
12 // expected-error@+1 {{binding type 'i' ignored. The 'integer constant' binding type is no longer supported}}
13 cbuffer b : register(i0) {
16 // expected-error@+1 {{invalid space specifier 's2' used; expected 'space' followed by an integer, like space1}}
17 cbuffer c : register(b0, s2) {
20 // expected-error@+1 {{register number should be an integer}}
21 cbuffer d : register(bf, s2) {
24 // expected-error@+1 {{invalid space specifier 'spaces' used; expected 'space' followed by an integer, like space1}}
25 cbuffer e : register(b2, spaces) {
29 // expected-error@+1 {{expected identifier}}
30 cbuffer A : register() {}
32 // expected-error@+1 {{register number should be an integer}}
33 cbuffer B : register(space1) {}
35 // expected-error@+1 {{wrong argument format for hlsl attribute, use b2 instead}}
36 cbuffer C : register(b 2) {}
38 // expected-error@+2 {{wrong argument format for hlsl attribute, use b2 instead}}
39 // expected-error@+1 {{wrong argument format for hlsl attribute, use space3 instead}}
40 cbuffer D : register(b 2, space 3) {}
42 // expected-error@+1 {{'register' attribute only applies to cbuffer/tbuffer and external global variables}}
43 static MyTemplatedSRV<float> U : register(u5);
45 // expected-error@+1 {{'register' attribute only applies to cbuffer/tbuffer and external global variables}}
46 static float sa : register(c1);
48 float x[2] : register(c2); // valid
49 float y[2][2] : register(c3); // valid
50 float z[2][2][3] : register(c4); // valid
52 // expected-error@+1 {{binding type 'c' only applies to numeric variables in the global scope}}
53 groupshared float fa[10] : register(c5);
55 void foo() {
56   // expected-error@+1 {{'register' attribute only applies to cbuffer/tbuffer and external global variables}}
57   MyTemplatedSRV<float> U : register(u3);
59 void foo2() {
60   // expected-error@+1 {{'register' attribute only applies to cbuffer/tbuffer and external global variables}}
61   extern MyTemplatedSRV<float> U2 : register(u5);
64 // expected-error@+1 {{binding type 'u' only applies to UAV resources}}
65 float b : register(u0, space1);
67 // expected-error@+1 {{'register' attribute only applies to cbuffer/tbuffer and external global variables}}
68 void bar(MyTemplatedSRV<float> U : register(u3)) {
72 struct S {  
73   // expected-error@+1 {{'register' attribute only applies to cbuffer/tbuffer and external global variables}}
74   MyTemplatedSRV<float> U : register(u3);
77 // expected-error@+1 {{binding type 'z' is invalid}}
78 MyTemplatedSRV<float> U3 : register(z5);