If an expression of the form INT+(a+b)+INT was simplified, constant folding
would combine the ints, but then the level stage (to make INT+a+b) would
start reading from the second (deleted due to folding) INT rather than the
new end of the expression.
Reported by: Samuel Thibault (on yasm-devel@)
svn path=/trunk/yasm/; revision=2123
* ordering as was present originally.
* Combine integer terms as necessary.
*/
- for (i=e->numterms-1, o=level_numterms-1; i>=0; i--) {
+ for (i=fold_numterms-1, o=level_numterms-1; i>=0; i--) {
if (e->terms[i].type == YASM_EXPR_EXPR &&
e->terms[i].data.expn->op == e->op) {
/* bring up subexpression */
EXTRA_DIST += libyasm/tests/emptydata.hex
EXTRA_DIST += libyasm/tests/equ-expand.asm
EXTRA_DIST += libyasm/tests/equ-expand.hex
+EXTRA_DIST += libyasm/tests/expr-fold-level.asm
+EXTRA_DIST += libyasm/tests/expr-fold-level.hex
EXTRA_DIST += libyasm/tests/expr-wide-ident.asm
EXTRA_DIST += libyasm/tests/expr-wide-ident.hex
EXTRA_DIST += libyasm/tests/externdef.asm
--- /dev/null
+begin
+A equ 09000h
+a dd (A+(end-begin)+3)
+end
--- /dev/null
+07
+90
+00
+00