@@ -48,6 +48,7 @@ const EMPTY_SLOTNAMES = "slotnames field is empty"
4848const SLOTFLAGS_MISMATCH = " length(slotnames) < length(slotflags)"
4949const SSAVALUETYPES_MISMATCH = " not all SSAValues in AST have a type in ssavaluetypes"
5050const SSAVALUETYPES_MISMATCH_UNINFERRED = " uninferred CodeInfo ssavaluetypes field does not equal the number of present SSAValues"
51+ const SSAFLAGS_MISMATCH = " not all SSAValues have a corresponding `ssaflags`"
5152const NON_TOP_LEVEL_METHOD = " encountered `Expr` head `:method` in non-top-level code (i.e. `nargs` > 0)"
5253const NON_TOP_LEVEL_GLOBAL = " encountered `Expr` head `:global` in non-top-level code (i.e. `nargs` > 0)"
5354const SIGNATURE_NARGS_MISMATCH = " method signature does not match number of method arguments"
@@ -183,13 +184,16 @@ function validate_code!(errors::Vector{>:InvalidCodeError}, c::CodeInfo, is_top_
183184 nssavals = length (c. code)
184185 ! is_top_level && nslotnames == 0 && push! (errors, InvalidCodeError (EMPTY_SLOTNAMES))
185186 nslotnames < nslotflags && push! (errors, InvalidCodeError (SLOTFLAGS_MISMATCH, (nslotnames, nslotflags)))
186- if c. inferred
187- nssavaluetypes = length (c. ssavaluetypes:: Vector{Any} )
187+ ssavaluetypes = c. ssavaluetypes
188+ if isa (ssavaluetypes, Vector{Any})
189+ nssavaluetypes = length (ssavaluetypes)
188190 nssavaluetypes < nssavals && push! (errors, InvalidCodeError (SSAVALUETYPES_MISMATCH, (nssavals, nssavaluetypes)))
189191 else
190- ssavaluetypes = c . ssavaluetypes:: Int
191- ssavaluetypes != nssavals && push! (errors, InvalidCodeError (SSAVALUETYPES_MISMATCH_UNINFERRED, (nssavals, ssavaluetypes )))
192+ nssavaluetypes = ssavaluetypes:: Int
193+ nssavaluetypes ≠ nssavals && push! (errors, InvalidCodeError (SSAVALUETYPES_MISMATCH_UNINFERRED, (nssavals, nssavaluetypes )))
192194 end
195+ nssaflags = length (c. ssaflags)
196+ nssavals ≠ nssaflags && push! (errors, InvalidCodeError (SSAFLAGS_MISMATCH, (nssavals, nssaflags)))
193197 return errors
194198end
195199
0 commit comments