From 465a7bb121e37cc070c4a3a9ef899b079f762cf6 Mon Sep 17 00:00:00 2001 From: Dustin Graves Date: Mon, 7 Mar 2016 17:52:14 -0700 Subject: layers: Add func pointer NULL checks Add code generated NULL checks for function pointers. This enables parameter checking for the VkAllocationCallbacks struct, with param_checker additions for the vkDestroy functions that receive VkAllocationCallbacks parameters. Change-Id: I9910c52026aa584bb013ee5015b5cb04b2d6ddcd --- generator.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'generator.py') diff --git a/generator.py b/generator.py index 702627f3..5dc3c9a8 100644 --- a/generator.py +++ b/generator.py @@ -2942,6 +2942,9 @@ class ParamCheckerOutputGenerator(OutputGenerator): paramtype = param.find('type') if (paramtype.tail is not None) and ('*' in paramtype.tail): ispointer = paramtype.tail.count('*') + elif paramtype.text[:4] == 'PFN_': + # Treat function pointer typedefs as a pointer to a single value + ispointer = 1 return ispointer # # Check if the parameter passed in is a static array @@ -3133,7 +3136,11 @@ class ParamCheckerOutputGenerator(OutputGenerator): if req == 'VK_TRUE' or cvReq == 'VK_TRUE': checkExpr = 'skipCall |= validate_array(report_data, {}, "{ln}", {dn}, {pf}{ln}, {pf}{vn}, {}, {});\n'.format(name, cvReq, req, ln=lenParam.name, dn=valueDisplayName, vn=value.name, pf=valuePrefix) elif not value.isoptional: - checkExpr = 'skipCall |= validate_required_pointer(report_data, {}, {}, {}{vn});\n'.format(name, valueDisplayName, valuePrefix, vn=value.name) + # Function pointers need a reinterpret_cast to void* + if value.type[:4] == 'PFN_': + checkExpr = 'skipCall |= validate_required_pointer(report_data, {}, {}, reinterpret_cast({}{vn}));\n'.format(name, valueDisplayName, valuePrefix, vn=value.name) + else: + checkExpr = 'skipCall |= validate_required_pointer(report_data, {}, {}, {}{vn});\n'.format(name, valueDisplayName, valuePrefix, vn=value.name) # # If this is a pointer to a struct, see if it contains members # that need to be checked -- cgit v1.2.3