]> granicus.if.org Git - yasm/commitdiff
Fix bug in edge case of expr_level_op(): single intnum in expression with
authorPeter Johnson <peter@tortall.net>
Wed, 16 Jul 2003 04:55:07 +0000 (04:55 -0000)
committerPeter Johnson <peter@tortall.net>
Wed, 16 Jul 2003 04:55:07 +0000 (04:55 -0000)
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
modules/objfmts/bin/tests/Makefile.inc
modules/objfmts/bin/tests/levelop.asm [new file with mode: 0644]
modules/objfmts/bin/tests/levelop.errwarn [new file with mode: 0644]
modules/objfmts/bin/tests/levelop.hex [new file with mode: 0644]

index 138cc41a253257711bcaec3092d9e1ffcf45e877..40be394cc4c77bca33baf72b2ac74a24f144d933 100644 (file)
@@ -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)
index 31896fa642069ae540115cbd88fe403298196250..c0b28c5a5768eb5ec54ab4de3c135ab2fc27d640 100644 (file)
@@ -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 (file)
index 0000000..ee67eef
--- /dev/null
@@ -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 (file)
index 0000000..e69de29
diff --git a/modules/objfmts/bin/tests/levelop.hex b/modules/objfmts/bin/tests/levelop.hex
new file mode 100644 (file)
index 0000000..4e70f4b
--- /dev/null
@@ -0,0 +1,12 @@
+c7 
+06 
+1c 
+00 
+00 
+00 
+c7 
+06 
+1c 
+00 
+00 
+00