@@ -76,13 +76,15 @@ getSymbolicOperandMnemonic(SPIRV::OperandCategory::OperandCategory Category,
7676 const SPIRV::SymbolicOperand *EnumValueInCategory =
7777 SPIRV::lookupSymbolicOperandByCategory (Category);
7878
79+ auto TableEnd = ArrayRef (SPIRV::SymbolicOperands).end ();
7980 while (EnumValueInCategory && EnumValueInCategory->Category == Category) {
8081 if ((EnumValueInCategory->Value != 0 ) &&
8182 (Value & EnumValueInCategory->Value )) {
8283 Name += Separator + EnumValueInCategory->Mnemonic .str ();
8384 Separator = " |" ;
8485 }
85- ++EnumValueInCategory;
86+ if (++EnumValueInCategory == TableEnd)
87+ break ;
8688 }
8789
8890 return Name;
@@ -123,8 +125,7 @@ getSymbolicOperandCapabilities(SPIRV::OperandCategory::OperandCategory Category,
123125 Capability->Value == Value) {
124126 Capabilities.push_back (
125127 static_cast <SPIRV::Capability::Capability>(Capability->ReqCapability ));
126- ++Capability;
127- if (Capability == TableEnd)
128+ if (++Capability == TableEnd)
128129 break ;
129130 }
130131
@@ -138,16 +139,15 @@ getCapabilitiesEnabledByExtension(SPIRV::Extension::Extension Extension) {
138139 Extension, SPIRV::OperandCategory::CapabilityOperand);
139140
140141 CapabilityList Capabilities;
142+ auto TableEnd = ArrayRef (SPIRV::ExtensionEntries).end ();
141143 while (Entry &&
142144 Entry->Category == SPIRV::OperandCategory::CapabilityOperand) {
143145 // Some capabilities' codes might go not in order.
144- if (Entry->ReqExtension != Extension) {
145- ++Entry;
146- continue ;
147- }
148- Capabilities.push_back (
149- static_cast <SPIRV::Capability::Capability>(Entry->Value ));
150- ++Entry;
146+ if (Entry->ReqExtension == Extension)
147+ Capabilities.push_back (
148+ static_cast <SPIRV::Capability::Capability>(Entry->Value ));
149+ if (++Entry == TableEnd)
150+ break ;
151151 }
152152
153153 return Capabilities;
@@ -160,11 +160,13 @@ getSymbolicOperandExtensions(SPIRV::OperandCategory::OperandCategory Category,
160160 SPIRV::lookupExtensionByCategoryAndValue (Category, Value);
161161
162162 ExtensionList Extensions;
163+ auto TableEnd = ArrayRef (SPIRV::ExtensionEntries).end ();
163164 while (Extension && Extension->Category == Category &&
164165 Extension->Value == Value) {
165166 Extensions.push_back (
166167 static_cast <SPIRV::Extension::Extension>(Extension->ReqExtension ));
167- ++Extension;
168+ if (++Extension == TableEnd)
169+ break ;
168170 }
169171
170172 return Extensions;
0 commit comments