From 9755c71cfc49353e612982bdd510ed7ca53413da Mon Sep 17 00:00:00 2001 From: meserve-amd Date: Mon, 1 Jul 2024 13:55:53 -0500 Subject: [PATCH] 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 --- script/gen_ostream_ops.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/script/gen_ostream_ops.py b/script/gen_ostream_ops.py index 71db338490..9b45cb4e3e 100755 --- a/script/gen_ostream_ops.py +++ b/script/gen_ostream_ops.py @@ -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