From 017baefb668ba339ee7c77f060d01e822cfa3ce8 Mon Sep 17 00:00:00 2001 From: Eric Blake Date: Mon, 19 Feb 2018 19:07:01 -0500 Subject: [PATCH] qapi: More robust conditions for when labels are needed We were using regular expressions to see if ret included any earlier text that emitted a 'goto out;' line, to decide whether we needed to output an 'out:' label. But this is fragile, if the ret text can possibly combine more than one generated function body, where the first function used a goto but the second does not. Change the code to just check for the known conditions which cause an error check to be needed. Besides, it's slightly more efficient to use plain checks than regular expression searching. No change to generated code. Backports commit f9e6102b48f21e464a847a858a456c521e7a83e5 from qemu --- qemu/scripts/qapi-visit.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/qemu/scripts/qapi-visit.py b/qemu/scripts/qapi-visit.py index 2d1828ac..4b9a341d 100644 --- a/qemu/scripts/qapi-visit.py +++ b/qemu/scripts/qapi-visit.py @@ -85,7 +85,8 @@ static void visit_type_%(c_name)s_fields(Visitor *v, %(c_name)s **obj, Error **e ret += gen_visit_fields(members, prefix='(*obj)->') - if re.search('^ *goto out;', ret, re.MULTILINE): + # 'goto out' produced for base, and by gen_visit_fields() for each member + if base or members: ret += mcgen(''' out: