From 5a928581ab81e7afad8d72e610160053c5194816 Mon Sep 17 00:00:00 2001 From: Bill Currie Date: Tue, 24 Sep 2024 11:09:10 +0900 Subject: [PATCH] [vkgen] Fix parsing of actual bool types Switching to native ruamoko bool for vkgen resulted in bool getting incorrectly parsed as a string (which mean getting the string's address written to the value). Fixes the randomly enabled debug pipelines (and probably a few randomly disabled normal pipelines, though less likely as they're usually implicitly initialized). The one bit of actual legit UB (ie, that which wasn't immediately mitigated one way or another) found by ubsan, and it was a data error. --- libs/video/renderer/vulkan/vkgen/vkbool.r | 11 +++++++++++ libs/video/renderer/vulkan/vkgen/vkenum.r | 2 +- libs/video/renderer/vulkan/vkgen/vkstruct.r | 2 +- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/libs/video/renderer/vulkan/vkgen/vkbool.r b/libs/video/renderer/vulkan/vkgen/vkbool.r index db806e99c..e3ab482e4 100644 --- a/libs/video/renderer/vulkan/vkgen/vkbool.r +++ b/libs/video/renderer/vulkan/vkgen/vkbool.r @@ -19,4 +19,15 @@ { return "QFString"; } + +-(string) parseFunc +{ + return "parse_enum"; +} + +-(string) parseData +{ + return "&cexpr_bool_enum"; +} + @end diff --git a/libs/video/renderer/vulkan/vkgen/vkenum.r b/libs/video/renderer/vulkan/vkgen/vkenum.r index f7902e003..48b604dbc 100644 --- a/libs/video/renderer/vulkan/vkgen/vkenum.r +++ b/libs/video/renderer/vulkan/vkgen/vkenum.r @@ -200,7 +200,7 @@ skip_value(string name) { fprintf (output_file, "\tHash_DelTable (%s_symtab.tab);\n", [self name]); - fprintf (output_file, "\t%s_symtab.tab = 0;\n", [self name]); + fprintf (output_file, "\t%s_symtab.tab = nullptr;\n", [self name]); } -(void) writeSymtabEntry diff --git a/libs/video/renderer/vulkan/vkgen/vkstruct.r b/libs/video/renderer/vulkan/vkgen/vkstruct.r index 302bf4cd4..364bcf96d 100644 --- a/libs/video/renderer/vulkan/vkgen/vkstruct.r +++ b/libs/video/renderer/vulkan/vkgen/vkstruct.r @@ -532,7 +532,7 @@ write_table (Struct *self, PLItem *field_dict, Array *field_defs, fprintf (output_file, "\tHash_DelTable (%s_symtab.tab);\n", [self outname]); - fprintf (output_file, "\t%s_symtab.tab = 0;\n", [self outname]); + fprintf (output_file, "\t%s_symtab.tab = nullptr;\n", [self outname]); } -(void) writeSymtabEntry