From aba280447637fc0b662c8649cc1697beefc256e7 Mon Sep 17 00:00:00 2001 From: Peter Johnson Date: Wed, 16 Jul 2003 04:55:07 +0000 Subject: [PATCH] Fix bug in edge case of expr_level_op(): single intnum in expression with intnum folding on and leveling performed would result in terms getting copied over due to hitting o != i case after i++ but no o++. Bugzilla: #12. Reported by: meor@softhome.net svn path=/trunk/yasm/; revision=1009 --- libyasm/expr.c | 3 ++- modules/objfmts/bin/tests/Makefile.inc | 3 +++ modules/objfmts/bin/tests/levelop.asm | 4 ++++ modules/objfmts/bin/tests/levelop.errwarn | 0 modules/objfmts/bin/tests/levelop.hex | 12 ++++++++++++ 5 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 modules/objfmts/bin/tests/levelop.asm create mode 100644 modules/objfmts/bin/tests/levelop.errwarn create mode 100644 modules/objfmts/bin/tests/levelop.hex diff --git a/libyasm/expr.c b/libyasm/expr.c index 138cc41a..40be394c 100644 --- a/libyasm/expr.c +++ b/libyasm/expr.c @@ -579,7 +579,8 @@ expr_level_op(/*@returned@*/ /*@only@*/ yasm_expr *e, int fold_const, } else if (o != i) { /* copy term if it changed places */ e->terms[o++] = e->terms[i]; - } + } else + o++; } if (simplify_ident) diff --git a/modules/objfmts/bin/tests/Makefile.inc b/modules/objfmts/bin/tests/Makefile.inc index 31896fa6..c0b28c5a 100644 --- a/modules/objfmts/bin/tests/Makefile.inc +++ b/modules/objfmts/bin/tests/Makefile.inc @@ -23,6 +23,9 @@ EXTRA_DIST += modules/objfmts/bin/tests/integer-warn.errwarn EXTRA_DIST += modules/objfmts/bin/tests/integer.asm EXTRA_DIST += modules/objfmts/bin/tests/integer.hex EXTRA_DIST += modules/objfmts/bin/tests/integer.errwarn +EXTRA_DIST += modules/objfmts/bin/tests/levelop.asm +EXTRA_DIST += modules/objfmts/bin/tests/levelop.hex +EXTRA_DIST += modules/objfmts/bin/tests/levelop.errwarn EXTRA_DIST += modules/objfmts/bin/tests/reserve.asm EXTRA_DIST += modules/objfmts/bin/tests/reserve.hex EXTRA_DIST += modules/objfmts/bin/tests/reserve.errwarn diff --git a/modules/objfmts/bin/tests/levelop.asm b/modules/objfmts/bin/tests/levelop.asm new file mode 100644 index 00000000..ee67eef9 --- /dev/null +++ b/modules/objfmts/bin/tests/levelop.asm @@ -0,0 +1,4 @@ +test1: +mov word [0x0010 + (test2 - test1)], 0x0000 +mov word [0x0010 + test2 - test1], 0x0000 +test2: diff --git a/modules/objfmts/bin/tests/levelop.errwarn b/modules/objfmts/bin/tests/levelop.errwarn new file mode 100644 index 00000000..e69de29b diff --git a/modules/objfmts/bin/tests/levelop.hex b/modules/objfmts/bin/tests/levelop.hex new file mode 100644 index 00000000..4e70f4b7 --- /dev/null +++ b/modules/objfmts/bin/tests/levelop.hex @@ -0,0 +1,12 @@ +c7 +06 +1c +00 +00 +00 +c7 +06 +1c +00 +00 +00 -- 2.40.0