aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorH. Peter Anvin <hpa@zytor.com>2019-10-07 21:19:32 -0700
committerH. Peter Anvin <hpa@zytor.com>2019-10-07 21:25:18 -0700
commitd983b6223304fb9bca16c20df0d5349605f25541 (patch)
treed850ce64674ddfb525bf51db78d9f55b1c04c330 /test
parent58bd8e66443f6f489337723bba2fcc1f2b6e48a1 (diff)
downloadnasm-d983b6223304fb9bca16c20df0d5349605f25541.tar.gz
nasm-d983b6223304fb9bca16c20df0d5349605f25541.tar.xz
nasm-d983b6223304fb9bca16c20df0d5349605f25541.zip
preproc: make %exitrep do what it is supposed to
%exitrep should should stop emitting code immediately, not just terminate the loop when we hit %endrep. There is a bunch of hacky code that special-cases that using istk->in_progress == 0. The handling of the tail of %exitrep, %include and non-emitting conditionals using entirely different mechanisms is just dumb. They need to be unified. Link: https://bugzilla.nasm.us/show_bug.cgi?id=3392612 Reported-by: Jason Hood <jadoxa@yahoo.com.au> Signed-off-by: H. Peter Anvin <hpa@zytor.com>
Diffstat (limited to 'test')
-rw-r--r--test/exitrep.asm16
1 files changed, 16 insertions, 0 deletions
diff --git a/test/exitrep.asm b/test/exitrep.asm
new file mode 100644
index 00000000..3be87055
--- /dev/null
+++ b/test/exitrep.asm
@@ -0,0 +1,16 @@
+%macro testrep 0.nolist
+ %assign i 1
+ %rep 4
+ mov eax,i
+ %if i==3
+ %exitrep
+ %endif
+ mov ebx,i
+ %ifn i < 3
+ %error iteration i should not be seen
+ %endif
+ %assign i i+1
+ %endrep
+%endmacro
+
+testrep