Skip to content

Commit 4116522

Browse files
committed
add sema tests
1 parent 91e8c29 commit 4116522

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">;
@@ -4958,7 +4958,7 @@ def HLSLWaveSize: InheritableAttr {
49584958

49594959
def HLSLVkExtBuiltinInput : InheritableAttr {
49604960
let Spellings = [CXX11<"vk", "ext_builtin_input">];
4961-
let Args = [IntArgument<"BuiltIn">];
4961+
let Args = [UnsignedArgument<"BuiltIn">];
49624962
let Subjects = SubjectList<[HLSLInputBuiltin], ErrorDiag>;
49634963
let LangOpts = [HLSL];
49644964
let Documentation = [HLSLVkExtBuiltinInputDocs];

clang/lib/Sema/SemaHLSL.cpp

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

11201120
void SemaHLSL::handleVkExtBuiltinInputAttr(Decl *D, const ParsedAttr &AL) {
1121-
IntegerLiteral *IL = cast<IntegerLiteral>(AL.getArgAsExpr(0));
1122-
D->addAttr(::new (getASTContext()) HLSLVkExtBuiltinInputAttr(
1123-
getASTContext(), AL, IL->getValue().getZExtValue()));
1121+
uint32_t ID;
1122+
if (!SemaRef.checkUInt32Argument(AL, AL.getArgAsExpr(0), ID))
1123+
return;
1124+
D->addAttr(::new (getASTContext())
1125+
HLSLVkExtBuiltinInputAttr(getASTContext(), AL, ID));
11241126
}
11251127

11261128
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)