[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 05/13] tests/qapi-schema: Demonstrate broken C code for 'if'
From: |
Markus Armbruster |
Subject: |
[PULL 05/13] tests/qapi-schema: Demonstrate broken C code for 'if' |
Date: |
Fri, 3 Sep 2021 21:32:01 +0200 |
The C code generated for 'if' conditionals is incorrectly
parenthesized. For instance,
'if': { 'not': { 'any': [ { 'not': 'TEST_IF_EVT' },
{ 'not': 'TEST_IF_STRUCT' } ] } } }
generates
#if !(!defined(TEST_IF_EVT)) || (!defined(TEST_IF_STRUCT))
This is wrong. Correct would be:
#if !(!defined(TEST_IF_EVT) || !defined(TEST_IF_STRUCT))
Cover the issue in qapi-schema-test.json. This generates bad #if in
tests/test-qapi-events.h and other files.
Add a similar condition to doc-good.json. The generated documentation
is fine.
Signed-off-by: Markus Armbruster <armbru@redhat.com>
Message-Id: <20210831123809.1107782-5-armbru@redhat.com>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
tests/qapi-schema/doc-good.json | 2 +-
tests/qapi-schema/doc-good.out | 2 +-
tests/qapi-schema/doc-good.txt | 2 +-
tests/qapi-schema/qapi-schema-test.json | 5 +++++
tests/qapi-schema/qapi-schema-test.out | 3 +++
5 files changed, 11 insertions(+), 3 deletions(-)
diff --git a/tests/qapi-schema/doc-good.json b/tests/qapi-schema/doc-good.json
index 5e30790730..e0027e4cf6 100644
--- a/tests/qapi-schema/doc-good.json
+++ b/tests/qapi-schema/doc-good.json
@@ -127,7 +127,7 @@
{ 'alternate': 'Alternate',
'features': [ 'alt-feat' ],
'data': { 'i': 'int', 'b': 'bool' },
- 'if': { 'not': 'IFNOT' } }
+ 'if': { 'not': { 'any': [ 'IFONE', 'IFTWO' ] } } }
##
# == Another subsection
diff --git a/tests/qapi-schema/doc-good.out b/tests/qapi-schema/doc-good.out
index 26d1fa5d28..d72f3047e9 100644
--- a/tests/qapi-schema/doc-good.out
+++ b/tests/qapi-schema/doc-good.out
@@ -51,7 +51,7 @@ alternate Alternate
tag type
case i: int
case b: bool
- if OrderedDict([('not', 'IFNOT')])
+ if OrderedDict([('not', OrderedDict([('any', ['IFONE', 'IFTWO'])]))])
feature alt-feat
object q_obj_cmd-arg
member arg1: int optional=False
diff --git a/tests/qapi-schema/doc-good.txt b/tests/qapi-schema/doc-good.txt
index 5bfe06e14e..85a370831f 100644
--- a/tests/qapi-schema/doc-good.txt
+++ b/tests/qapi-schema/doc-good.txt
@@ -174,7 +174,7 @@ Features
If
~~
-"!IFNOT"
+"!(IFONE or IFTWO)"
Another subsection
diff --git a/tests/qapi-schema/qapi-schema-test.json
b/tests/qapi-schema/qapi-schema-test.json
index e20f76d84c..6e37758280 100644
--- a/tests/qapi-schema/qapi-schema-test.json
+++ b/tests/qapi-schema/qapi-schema-test.json
@@ -261,6 +261,11 @@
'bar': { 'type': ['TestIfEnum'], 'if': 'TEST_IF_EVT_BAR' } },
'if': { 'all': ['TEST_IF_EVT', 'TEST_IF_STRUCT'] } }
+{ 'event': 'TEST_IF_EVENT2', 'data': {},
+ # FIXME C #if generated for this conditional is wrong
+ 'if': { 'not': { 'any': [ { 'not': 'TEST_IF_EVT' },
+ { 'not': 'TEST_IF_STRUCT' } ] } } }
+
# test 'features'
{ 'struct': 'FeatureStruct0',
diff --git a/tests/qapi-schema/qapi-schema-test.out
b/tests/qapi-schema/qapi-schema-test.out
index 517d802636..5d2e830ba2 100644
--- a/tests/qapi-schema/qapi-schema-test.out
+++ b/tests/qapi-schema/qapi-schema-test.out
@@ -357,6 +357,9 @@ object q_obj_TEST_IF_EVENT-arg
event TEST_IF_EVENT q_obj_TEST_IF_EVENT-arg
boxed=False
if OrderedDict([('all', ['TEST_IF_EVT', 'TEST_IF_STRUCT'])])
+event TEST_IF_EVENT2 None
+ boxed=False
+ if OrderedDict([('not', OrderedDict([('any', [OrderedDict([('not',
'TEST_IF_EVT')]), OrderedDict([('not', 'TEST_IF_STRUCT')])])]))])
object FeatureStruct0
member foo: int optional=False
object FeatureStruct1
--
2.31.1
- [PULL 00/13] QAPI patches patches for 2021-09-03, Markus Armbruster, 2021/09/03
- [PULL 01/13] qapi: Set boolean value correctly in examples, Markus Armbruster, 2021/09/03
- [PULL 06/13] qapi: Fix C code generation for 'if', Markus Armbruster, 2021/09/03
- [PULL 10/13] qapi: Use re.fullmatch() where appropriate, Markus Armbruster, 2021/09/03
- [PULL 04/13] tests/qapi-schema: Correct two 'if' conditionals, Markus Armbruster, 2021/09/03
- [PULL 03/13] qapi: Simplify how QAPISchemaIfCond represents "no condition", Markus Armbruster, 2021/09/03
- [PULL 05/13] tests/qapi-schema: Demonstrate broken C code for 'if',
Markus Armbruster <=
- [PULL 08/13] qapi: Avoid redundant parens in code generated for conditionals, Markus Armbruster, 2021/09/03
- [PULL 12/13] qapi: Tweak error messages for missing / conflicting meta-type, Markus Armbruster, 2021/09/03
- [PULL 11/13] tests/qapi-schema: Hide OrderedDict in test output, Markus Armbruster, 2021/09/03
- [PULL 02/13] qapi: Simplify QAPISchemaIfCond's interface for generating C, Markus Armbruster, 2021/09/03
- [PULL 13/13] qapi: Tweak error messages for unknown / conflicting 'if' keys, Markus Armbruster, 2021/09/03
- [PULL 07/13] qapi: Factor common recursion out of cgen_ifcond(), docgen_ifcond(), Markus Armbruster, 2021/09/03
- [PULL 09/13] qapi: Use "not COND" instead of "!COND" for generated documentation, Markus Armbruster, 2021/09/03
- Re: [PULL 00/13] QAPI patches patches for 2021-09-03, Peter Maydell, 2021/09/05