summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorH. Peter Anvin (Intel) <hpa@zytor.com>2019-10-23 12:59:06 -0700
committerH. Peter Anvin (Intel) <hpa@zytor.com>2019-10-23 12:59:06 -0700
commite91f5cc1322eed4da0de81656276e021bf352c3d (patch)
tree0043393b0084e7e50ae31909d29b3ab98a486803 /test
parent0741eb600481a97c3baddb290e0ab1a33a9e4921 (diff)
downloadnasm-e91f5cc1322eed4da0de81656276e021bf352c3d.tar.gz
preproc: fix %undef of macro aliases, and add %ifdefalias
Macro aliases can legitimately point to nonexistent macros. Furthermore, %undef should remove the pointed-at macro, not the alias. This led to an infinite loop in the existing code; fix that. Add an %ifdefalias directive to test for the existence of an alias. Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
Diffstat (limited to 'test')
-rw-r--r--test/defalias.asm52
1 files changed, 52 insertions, 0 deletions
diff --git a/test/defalias.asm b/test/defalias.asm
new file mode 100644
index 00000000..1641a1f1
--- /dev/null
+++ b/test/defalias.asm
@@ -0,0 +1,52 @@
+%defalias foo bar
+%ifdef foo
+ %error "foo should not be defined here!"
+%endif
+
+%define foo 33
+%ifndef foo
+ %error "foo should be defined here!"
+%endif
+%ifndef bar
+ %error "bar should be defined here!"
+%endif
+%if bar != 33
+ %error "bar should have the value 33 here"
+%endif
+
+%define bar 34
+%if foo != 34
+ %error "foo should have the value 34 here"
+%endif
+
+%undef foo
+%ifdef foo
+ %error "foo should not be defined here!"
+%endif
+%ifdef bar
+ %error "bar should not be defined here!"
+%endif
+
+%ifndefalias foo
+ %error "foo was removed as an alias!"
+%endif
+
+%define bar 35
+%if foo != 35
+ %error "foo should have the value 35 here"
+%endif
+
+%define foo 36
+%if bar != 36
+ %error "bar should have the value 36 here"
+%endif
+
+%undefalias foo
+%ifdef foo
+ %error "foo is still defined after %undefalias"
+%elifdefalias foo
+ %error "foo is undefined, but still an alias"
+%endif
+%ifndef bar
+ %error "bar disappeared after %undefalias foo"
+%endif