summary refs log tree commit diff stats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/Makefile.include9
-rwxr-xr-xtests/decode/check.sh18
-rw-r--r--tests/decode/err_argset1.decode5
-rw-r--r--tests/decode/err_argset2.decode5
-rw-r--r--tests/decode/err_field1.decode5
-rw-r--r--tests/decode/err_field2.decode5
-rw-r--r--tests/decode/err_field3.decode5
-rw-r--r--tests/decode/err_field4.decode6
-rw-r--r--tests/decode/err_field5.decode5
-rw-r--r--tests/decode/err_init1.decode6
-rw-r--r--tests/decode/err_init2.decode6
-rw-r--r--tests/decode/err_init3.decode7
-rw-r--r--tests/decode/err_init4.decode7
-rw-r--r--tests/decode/err_overlap1.decode6
-rw-r--r--tests/decode/err_overlap2.decode6
-rw-r--r--tests/decode/err_overlap3.decode6
-rw-r--r--tests/decode/err_overlap4.decode6
-rw-r--r--tests/decode/err_overlap5.decode5
-rw-r--r--tests/decode/err_overlap6.decode6
-rw-r--r--tests/decode/err_overlap7.decode6
-rw-r--r--tests/decode/err_overlap8.decode5
-rw-r--r--tests/decode/err_overlap9.decode6
22 files changed, 140 insertions, 1 deletions
diff --git a/tests/Makefile.include b/tests/Makefile.include
index a1bcbffe12..577eb573a2 100644
--- a/tests/Makefile.include
+++ b/tests/Makefile.include
@@ -932,6 +932,13 @@ $(patsubst %, check-%, $(check-qapi-schema-y)): check-%.json: $(SRC_PATH)/%.json
 check-tests/qapi-schema/doc-good.texi: tests/qapi-schema/doc-good.test.texi
 	@diff -q $(SRC_PATH)/tests/qapi-schema/doc-good.texi $<
 
+.PHONY: check-decodetree
+check-decodetree:
+	$(call quiet-command, \
+	  cd $(SRC_PATH)/tests/decode && \
+          ./check.sh "$(PYTHON)" "$(SRC_PATH)/scripts/decodetree.py", \
+          TEST, decodetree.py)
+
 # Consolidated targets
 
 .PHONY: check-qapi-schema check-qtest check-unit check check-clean
@@ -940,7 +947,7 @@ check-qtest: $(patsubst %,check-qtest-%, $(QTEST_TARGETS))
 check-unit: $(patsubst %,check-%, $(check-unit-y))
 check-speed: $(patsubst %,check-%, $(check-speed-y))
 check-block: $(patsubst %,check-%, $(check-block-y))
-check: check-qapi-schema check-unit check-qtest
+check: check-qapi-schema check-unit check-qtest check-decodetree
 check-clean:
 	$(MAKE) -C tests/tcg clean
 	rm -rf $(check-unit-y) tests/*.o $(QEMU_IOTESTS_HELPERS-y)
diff --git a/tests/decode/check.sh b/tests/decode/check.sh
new file mode 100755
index 0000000000..79a06c37cd
--- /dev/null
+++ b/tests/decode/check.sh
@@ -0,0 +1,18 @@
+#!/bin/sh
+# This work is licensed under the terms of the GNU LGPL, version 2 or later.
+# See the COPYING.LIB file in the top-level directory.
+
+PYTHON=$1
+DECODETREE=$2
+E=0
+
+# All of these tests should produce errors
+for i in err_*.decode; do
+    if $PYTHON $DECODETREE $i > /dev/null 2> /dev/null; then
+        # Pass, aka failed to fail.
+        echo FAIL: $i 1>&2
+        E=1
+    fi
+done
+
+exit $E
diff --git a/tests/decode/err_argset1.decode b/tests/decode/err_argset1.decode
new file mode 100644
index 0000000000..fcaebcce76
--- /dev/null
+++ b/tests/decode/err_argset1.decode
@@ -0,0 +1,5 @@
+# This work is licensed under the terms of the GNU LGPL, version 2 or later.
+# See the COPYING.LIB file in the top-level directory.
+
+# Diagnose duplicate member names
+&args	a a
diff --git a/tests/decode/err_argset2.decode b/tests/decode/err_argset2.decode
new file mode 100644
index 0000000000..256b2f9b12
--- /dev/null
+++ b/tests/decode/err_argset2.decode
@@ -0,0 +1,5 @@
+# This work is licensed under the terms of the GNU LGPL, version 2 or later.
+# See the COPYING.LIB file in the top-level directory.
+
+# Diagnose invalid member names
+&args	a b c d0 0e
diff --git a/tests/decode/err_field1.decode b/tests/decode/err_field1.decode
new file mode 100644
index 0000000000..e07a5a73e0
--- /dev/null
+++ b/tests/decode/err_field1.decode
@@ -0,0 +1,5 @@
+# This work is licensed under the terms of the GNU LGPL, version 2 or later.
+# See the COPYING.LIB file in the top-level directory.
+
+# Diagnose invalid field syntax
+%field	asdf
diff --git a/tests/decode/err_field2.decode b/tests/decode/err_field2.decode
new file mode 100644
index 0000000000..7664a3ebe9
--- /dev/null
+++ b/tests/decode/err_field2.decode
@@ -0,0 +1,5 @@
+# This work is licensed under the terms of the GNU LGPL, version 2 or later.
+# See the COPYING.LIB file in the top-level directory.
+
+# Diagnose invalid field width.
+%field	0:33
diff --git a/tests/decode/err_field3.decode b/tests/decode/err_field3.decode
new file mode 100644
index 0000000000..87e680f103
--- /dev/null
+++ b/tests/decode/err_field3.decode
@@ -0,0 +1,5 @@
+# This work is licensed under the terms of the GNU LGPL, version 2 or later.
+# See the COPYING.LIB file in the top-level directory.
+
+# Diagnose invalid field position.
+%field	31:2
diff --git a/tests/decode/err_field4.decode b/tests/decode/err_field4.decode
new file mode 100644
index 0000000000..888ce4729b
--- /dev/null
+++ b/tests/decode/err_field4.decode
@@ -0,0 +1,6 @@
+# This work is licensed under the terms of the GNU LGPL, version 2 or later.
+# See the COPYING.LIB file in the top-level directory.
+
+# Diagnose duplicate field name.
+%field	0:1
+%field	0:1
diff --git a/tests/decode/err_field5.decode b/tests/decode/err_field5.decode
new file mode 100644
index 0000000000..b0c62af866
--- /dev/null
+++ b/tests/decode/err_field5.decode
@@ -0,0 +1,5 @@
+# This work is licensed under the terms of the GNU LGPL, version 2 or later.
+# See the COPYING.LIB file in the top-level directory.
+
+# Diagnose duplicate function specifier.
+%field	0:1	!function=a !function=a
diff --git a/tests/decode/err_init1.decode b/tests/decode/err_init1.decode
new file mode 100644
index 0000000000..da855bd00a
--- /dev/null
+++ b/tests/decode/err_init1.decode
@@ -0,0 +1,6 @@
+# This work is licensed under the terms of the GNU LGPL, version 2 or later.
+# See the COPYING.LIB file in the top-level directory.
+
+# Diagnose uninitialized member in pattern.
+&args	a b
+insn	00000000 00000000 00000000 b:8	&args
diff --git a/tests/decode/err_init2.decode b/tests/decode/err_init2.decode
new file mode 100644
index 0000000000..b58de30098
--- /dev/null
+++ b/tests/decode/err_init2.decode
@@ -0,0 +1,6 @@
+# This work is licensed under the terms of the GNU LGPL, version 2 or later.
+# See the COPYING.LIB file in the top-level directory.
+
+# Diagnose member initialized twice in pattern.
+&args	a b
+insn	00000000 00000000 a:8 b:8	&args a=1
diff --git a/tests/decode/err_init3.decode b/tests/decode/err_init3.decode
new file mode 100644
index 0000000000..96790abfdc
--- /dev/null
+++ b/tests/decode/err_init3.decode
@@ -0,0 +1,7 @@
+# This work is licensed under the terms of the GNU LGPL, version 2 or later.
+# See the COPYING.LIB file in the top-level directory.
+
+# Diagnose member initialized twice in pattern + format.
+&args	a
+@format	........ ........ a:16	&args
+insn	00000000 00000000 a:16	@format
diff --git a/tests/decode/err_init4.decode b/tests/decode/err_init4.decode
new file mode 100644
index 0000000000..4336d4632f
--- /dev/null
+++ b/tests/decode/err_init4.decode
@@ -0,0 +1,7 @@
+# This work is licensed under the terms of the GNU LGPL, version 2 or later.
+# See the COPYING.LIB file in the top-level directory.
+
+# Diagnose uninitialized member in pattern + format.
+&args	a b
+@format	........ ........ a:16			&args
+insn	00000000 00000000 ........ ........	@format
diff --git a/tests/decode/err_overlap1.decode b/tests/decode/err_overlap1.decode
new file mode 100644
index 0000000000..1ae63472dc
--- /dev/null
+++ b/tests/decode/err_overlap1.decode
@@ -0,0 +1,6 @@
+# This work is licensed under the terms of the GNU LGPL, version 2 or later.
+# See the COPYING.LIB file in the top-level directory.
+
+# Diagnose field overlapping fixedbits.
+%field	0:1
+insn	00000000 00000000 00000000 00000000 	%field
diff --git a/tests/decode/err_overlap2.decode b/tests/decode/err_overlap2.decode
new file mode 100644
index 0000000000..1d6d7a3930
--- /dev/null
+++ b/tests/decode/err_overlap2.decode
@@ -0,0 +1,6 @@
+# This work is licensed under the terms of the GNU LGPL, version 2 or later.
+# See the COPYING.LIB file in the top-level directory.
+
+# Diagnose field overlapping fixedbits w/format.
+@format		........ ........ ........ ....... fld:1
+insn		00000000 00000000 00000000 00000000		@format
diff --git a/tests/decode/err_overlap3.decode b/tests/decode/err_overlap3.decode
new file mode 100644
index 0000000000..3ab0c4850a
--- /dev/null
+++ b/tests/decode/err_overlap3.decode
@@ -0,0 +1,6 @@
+# This work is licensed under the terms of the GNU LGPL, version 2 or later.
+# See the COPYING.LIB file in the top-level directory.
+
+# Diagnose field overlapping unspecified bits.
+%field	0:1
+insn	00000000 00000000 00000000 --------	%field
diff --git a/tests/decode/err_overlap4.decode b/tests/decode/err_overlap4.decode
new file mode 100644
index 0000000000..53c5399d39
--- /dev/null
+++ b/tests/decode/err_overlap4.decode
@@ -0,0 +1,6 @@
+# This work is licensed under the terms of the GNU LGPL, version 2 or later.
+# See the COPYING.LIB file in the top-level directory.
+
+# Diagnose fixed bits overlapping unspecified bits.
+@format		........ ........ ........ .......-
+insn		00000000 00000000 00000000 00000000	@format
diff --git a/tests/decode/err_overlap5.decode b/tests/decode/err_overlap5.decode
new file mode 100644
index 0000000000..df0e31fffb
--- /dev/null
+++ b/tests/decode/err_overlap5.decode
@@ -0,0 +1,5 @@
+# This work is licensed under the terms of the GNU LGPL, version 2 or later.
+# See the COPYING.LIB file in the top-level directory.
+
+# Diagnose overlapping sub-fields.
+%field	3:5 0:5
diff --git a/tests/decode/err_overlap6.decode b/tests/decode/err_overlap6.decode
new file mode 100644
index 0000000000..cc69fc8fdd
--- /dev/null
+++ b/tests/decode/err_overlap6.decode
@@ -0,0 +1,6 @@
+# This work is licensed under the terms of the GNU LGPL, version 2 or later.
+# See the COPYING.LIB file in the top-level directory.
+
+# Diagnose overlapping fixed bits w/format.
+@format		........ ........ ........ .......1
+insn		00000000 00000000 00000000 00000000	@format
diff --git a/tests/decode/err_overlap7.decode b/tests/decode/err_overlap7.decode
new file mode 100644
index 0000000000..6f555295ab
--- /dev/null
+++ b/tests/decode/err_overlap7.decode
@@ -0,0 +1,6 @@
+# This work is licensed under the terms of the GNU LGPL, version 2 or later.
+# See the COPYING.LIB file in the top-level directory.
+
+# Diagnose overlapping patterns.
+insn1		00000000 00000000 00000000 00000000
+insn2		00000000 00000000 00000000 00000000
diff --git a/tests/decode/err_overlap8.decode b/tests/decode/err_overlap8.decode
new file mode 100644
index 0000000000..df4bae8f1c
--- /dev/null
+++ b/tests/decode/err_overlap8.decode
@@ -0,0 +1,5 @@
+# This work is licensed under the terms of the GNU LGPL, version 2 or later.
+# See the COPYING.LIB file in the top-level directory.
+
+# Diagnose not specified bit (. vs -).
+insn	00000000 00000000 00000000 0000000.
diff --git a/tests/decode/err_overlap9.decode b/tests/decode/err_overlap9.decode
new file mode 100644
index 0000000000..58b6ac121a
--- /dev/null
+++ b/tests/decode/err_overlap9.decode
@@ -0,0 +1,6 @@
+# This work is licensed under the terms of the GNU LGPL, version 2 or later.
+# See the COPYING.LIB file in the top-level directory.
+
+# Diagnose not specified bit (. vs -) w/format.
+@format		........ a:8      ........ b:7 .
+insn		00000000 ........ 00000000 ........	@format