SWDEV-470344: Fix build time parsing of unions

- Fixes issue where types defined inside of a union were being skipped
  for ostream operator generation
- Also fixes issue where these types were not correctly defined in the
  resulting operators' parameters
- Fixes edge case where types with "union" in their name were being
  skipped as if they were union types

Change-Id: I717e56c1d0250eeae402bb83e39dec9990cff70d


[ROCm/roctracer commit: 9755c71cfc]
Este commit está contenido en:
meserve-amd
2024-07-01 13:55:53 -05:00
padre 9d259fb6dd
commit 6ad8d8f2c9
+9 -1
Ver fichero
@@ -225,9 +225,17 @@ def gen_cppheader(infilepath, outfilepath, rank):
output_filename_h.write(header_basic)
output_filename_h.write("// End of basic ostream ops\n\n")
for c in cppHeader.classes.copy():
# Types defined inside of unions are incorrectly prepended with "union " after parsing by CppHeaderParser
# Remove "union " from the beginning of the full class name to correct the eventual output
if "union " in c[0:6] and "::union" not in c[-8:]:
new_name = c[6:]
cppHeader.classes[new_name] = cppHeader.classes[c]
del cppHeader.classes[c]
for c in cppHeader.classes:
if c[-2] == ':' and c[-1] == ':': continue #ostream operator cannot be overloaded for anonymous struct therefore it is skipped
if "union" in c:
if "::union" in c:
continue
if c in structs_analyzed:
continue