@@ -22,18 +22,20 @@ namespace hlsl {
2222namespace rootsig {
2323
2424template <typename T>
25- static StringRef getEnumName (const T Value, ArrayRef<EnumEntry<T>> Enums) {
25+ static std::optional<StringRef> getEnumName (const T Value,
26+ ArrayRef<EnumEntry<T>> Enums) {
2627 for (const auto &EnumItem : Enums)
2728 if (EnumItem.Value == Value)
2829 return EnumItem.Name ;
29- return " " ;
30+ return std:: nullopt ;
3031}
3132
3233template <typename T>
3334static raw_ostream &printEnum (raw_ostream &OS, const T Value,
3435 ArrayRef<EnumEntry<T>> Enums) {
35- OS << getEnumName (Value, Enums);
36-
36+ auto MaybeName = getEnumName (Value, Enums);
37+ if (MaybeName)
38+ OS << *MaybeName;
3739 return OS;
3840}
3941
@@ -234,10 +236,11 @@ MDNode *MetadataBuilder::BuildRootConstants(const RootConstants &Constants) {
234236
235237MDNode *MetadataBuilder::BuildRootDescriptor (const RootDescriptor &Descriptor) {
236238 IRBuilder<> Builder (Ctx);
237- StringRef TypeName =
239+ std::optional< StringRef> TypeName =
238240 getEnumName (dxil::ResourceClass (llvm::to_underlying (Descriptor.Type )),
239241 ArrayRef (ResourceClassNames));
240- llvm::SmallString<7 > Name ({" Root" , TypeName});
242+ assert (TypeName && " Provided an invalid Resource Class" );
243+ llvm::SmallString<7 > Name ({" Root" , *TypeName});
241244 Metadata *Operands[] = {
242245 MDString::get (Ctx, Name),
243246 ConstantAsMetadata::get (
@@ -275,11 +278,12 @@ MDNode *MetadataBuilder::BuildDescriptorTable(const DescriptorTable &Table) {
275278MDNode *MetadataBuilder::BuildDescriptorTableClause (
276279 const DescriptorTableClause &Clause) {
277280 IRBuilder<> Builder (Ctx);
278- StringRef Name =
281+ std::optional< StringRef> Name =
279282 getEnumName (dxil::ResourceClass (llvm::to_underlying (Clause.Type )),
280283 ArrayRef (ResourceClassNames));
284+ assert (Name && " Provided an invalid Resource Class" );
281285 Metadata *Operands[] = {
282- MDString::get (Ctx, Name),
286+ MDString::get (Ctx, * Name),
283287 ConstantAsMetadata::get (Builder.getInt32 (Clause.NumDescriptors )),
284288 ConstantAsMetadata::get (Builder.getInt32 (Clause.Reg .Number )),
285289 ConstantAsMetadata::get (Builder.getInt32 (Clause.Space )),
0 commit comments