If the 'dwords' dict is empty, max(dwords.keys()) throws an exception. This case could happen when we have an instruction that is only an array of other structs, with variable length.
v2: - Add another clause for empty dwords and make it work with python 3 (Dylan) - Set the length to 0 if dwords is empty, and do not declare dw Signed-off-by: Rafael Antognolli <rafael.antogno...@intel.com> Reviewed-by: Dylan Baker <dy...@pnwbakers.com> --- src/intel/genxml/gen_pack_header.py | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/intel/genxml/gen_pack_header.py b/src/intel/genxml/gen_pack_header.py index 29bec40..d0b1336 100644 --- a/src/intel/genxml/gen_pack_header.py +++ b/src/intel/genxml/gen_pack_header.py @@ -346,7 +346,7 @@ class Group(object): dwords[index + 1] = dwords[index] index = index + 1 - def emit_pack_function(self): + def collect_dwords_and_length(self): dwords = {} self.collect_dwords(dwords, 0, "") @@ -356,9 +356,14 @@ class Group(object): # index we've seen plus one. if self.size > 0: length = self.size // 32 - else: + elif dwords: length = max(dwords.keys()) + 1 + else: + length = 0 + + return (dwords, length) + def emit_pack_function(self, dwords, length): for index in range(length): # Handle MBZ dwords if not index in dwords: @@ -575,10 +580,12 @@ class Parser(object): print("static inline void\n%s_pack(__gen_user_data *data, void * restrict dst,\n%sconst struct %s * restrict values)\n{" % (name, ' ' * (len(name) + 6), name)) - # Cast dst to make header C++ friendly - print(" uint32_t * restrict dw = (uint32_t * restrict) dst;") + (dwords, length) = group.collect_dwords_and_length() + if length: + # Cast dst to make header C++ friendly + print(" uint32_t * restrict dw = (uint32_t * restrict) dst;") - group.emit_pack_function() + group.emit_pack_function(dwords, length) print("}\n") -- git-series 0.9.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev