Skip to content

Commit b0346a2

Browse files
committed
add sema tests
1 parent bd06b1f commit b0346a2

File tree

3 files changed

+36
-5
lines changed

3 files changed

+36
-5
lines changed

clang/include/clang/Basic/Attr.td

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ def SharedVar : SubsetSubject<Var,
143143
def HLSLInputBuiltin : SubsetSubject<Var, [{S->hasGlobalStorage() &&
144144
S->getStorageClass()==StorageClass::SC_Static &&
145145
S->getType().isConstQualified()}],
146-
"input builtin">;
146+
"static const globals">;
147147

148148
def GlobalVar : SubsetSubject<Var,
149149
[{S->hasGlobalStorage()}], "global variables">;
@@ -4899,7 +4899,7 @@ def HLSLWaveSize: InheritableAttr {
48994899

49004900
def HLSLVkExtBuiltinInput : InheritableAttr {
49014901
let Spellings = [CXX11<"vk", "ext_builtin_input">];
4902-
let Args = [IntArgument<"BuiltIn">];
4902+
let Args = [UnsignedArgument<"BuiltIn">];
49034903
let Subjects = SubjectList<[HLSLInputBuiltin], ErrorDiag>;
49044904
let LangOpts = [HLSL];
49054905
let Documentation = [HLSLVkExtBuiltinInputDocs];

clang/lib/Sema/SemaHLSL.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1070,9 +1070,11 @@ void SemaHLSL::handleWaveSizeAttr(Decl *D, const ParsedAttr &AL) {
10701070
}
10711071

10721072
void SemaHLSL::handleVkExtBuiltinInputAttr(Decl *D, const ParsedAttr &AL) {
1073-
IntegerLiteral *IL = cast<IntegerLiteral>(AL.getArgAsExpr(0));
1074-
D->addAttr(::new (getASTContext()) HLSLVkExtBuiltinInputAttr(
1075-
getASTContext(), AL, IL->getValue().getZExtValue()));
1073+
uint32_t ID;
1074+
if (!SemaRef.checkUInt32Argument(AL, AL.getArgAsExpr(0), ID))
1075+
return;
1076+
D->addAttr(::new (getASTContext())
1077+
HLSLVkExtBuiltinInputAttr(getASTContext(), AL, ID));
10761078
}
10771079

10781080
bool SemaHLSL::diagnoseInputIDType(QualType T, const ParsedAttr &AL) {
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
// RUN: %clang_cc1 -triple spirv-unkown-vulkan1.3-compute -x hlsl -hlsl-entry foo -finclude-default-header -o - %s -verify
2+
3+
// expected-error@+1 {{'ext_builtin_input' attribute only applies to static const globals}}
4+
[[vk::ext_builtin_input(/* WorkgroupId */ 26)]]
5+
const uint3 groupid1;
6+
7+
// expected-error@+1 {{'ext_builtin_input' attribute only applies to static const globals}}
8+
[[vk::ext_builtin_input(/* WorkgroupId */ 26)]]
9+
static uint3 groupid2;
10+
11+
// expected-error@+1 {{'ext_builtin_input' attribute takes one argument}}
12+
[[vk::ext_builtin_input()]]
13+
// expected-error@+1 {{default initialization of an object of const type 'const hlsl_private uint3' (aka 'const hlsl_private vector<uint, 3>')}}
14+
static const uint3 groupid3;
15+
16+
// expected-error@+1 {{'ext_builtin_input' attribute requires an integer constant}}
17+
[[vk::ext_builtin_input(0.4f)]]
18+
// expected-error@+1 {{default initialization of an object of const type 'const hlsl_private uint3' (aka 'const hlsl_private vector<uint, 3>')}}
19+
static const uint3 groupid4;
20+
21+
// expected-error@+1 {{'ext_builtin_input' attribute only applies to static const globals}}
22+
[[vk::ext_builtin_input(1)]]
23+
void some_function() {
24+
}
25+
26+
[numthreads(1,1,1)]
27+
void foo() {
28+
}
29+

0 commit comments

Comments
 (0)