Skip to content

Commit 9e338e0

Browse files
committed
Switch to std::optional<unsigned> type for the register slot number instead of using -1
1 parent 87f3030 commit 9e338e0

File tree

2 files changed

+9
-7
lines changed

2 files changed

+9
-7
lines changed

clang/include/clang/Basic/Attr.td

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4723,25 +4723,25 @@ def HLSLResourceBinding: InheritableAttr {
47234723

47244724
private:
47254725
RegisterType RegType;
4726-
int SlotNumber; // -1 if the register slot was not specified
4726+
std::optional<unsigned> SlotNumber;
47274727
unsigned SpaceNumber;
47284728

47294729
public:
4730-
void setBinding(RegisterType RT, int SlotNum, unsigned SpaceNum) {
4730+
void setBinding(RegisterType RT, std::optional<unsigned> SlotNum, unsigned SpaceNum) {
47314731
RegType = RT;
47324732
SlotNumber = SlotNum;
47334733
SpaceNumber = SpaceNum;
47344734
}
47354735
bool isImplicit() const {
4736-
return SlotNumber < 0;
4736+
return !SlotNumber.has_value();
47374737
}
47384738
RegisterType getRegisterType() const {
47394739
assert(!isImplicit() && "binding does not have register slot");
47404740
return RegType;
47414741
}
47424742
unsigned getSlotNumber() const {
47434743
assert(!isImplicit() && "binding does not have register slot");
4744-
return (unsigned)SlotNumber;
4744+
return SlotNumber.value();
47454745
}
47464746
unsigned getSpaceNumber() const {
47474747
return SpaceNumber;

clang/lib/Sema/SemaHLSL.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1569,7 +1569,7 @@ void SemaHLSL::handleResourceBindingAttr(Decl *TheDecl, const ParsedAttr &AL) {
15691569
}
15701570

15711571
RegisterType RegType = RegisterType::SRV;
1572-
int SlotNum = -1;
1572+
std::optional<unsigned> SlotNum;
15731573
unsigned SpaceNum = 0;
15741574

15751575
// Validate slot
@@ -1583,10 +1583,12 @@ void SemaHLSL::handleResourceBindingAttr(Decl *TheDecl, const ParsedAttr &AL) {
15831583
return;
15841584
}
15851585
StringRef SlotNumStr = Slot.substr(1);
1586-
if (SlotNumStr.getAsInteger(10, SlotNum)) {
1586+
unsigned N;
1587+
if (SlotNumStr.getAsInteger(10, N)) {
15871588
Diag(SlotLoc, diag::err_hlsl_unsupported_register_number);
15881589
return;
15891590
}
1591+
SlotNum = N;
15901592
}
15911593

15921594
// Validate space
@@ -1601,7 +1603,7 @@ void SemaHLSL::handleResourceBindingAttr(Decl *TheDecl, const ParsedAttr &AL) {
16011603
}
16021604

16031605
// If we have slot, diagnose it is the right register type for the decl
1604-
if (SlotNum >= 0)
1606+
if (SlotNum.has_value())
16051607
if (!DiagnoseHLSLRegisterAttribute(SemaRef, SlotLoc, TheDecl, RegType,
16061608
!SpaceLoc.isInvalid()))
16071609
return;

0 commit comments

Comments
 (0)