FIX: A2006: Phase Error Using EQU in An IFNDEF Block (40452)



The information in this article applies to:

  • Microsoft Macro Assembler (MASM) 5.1

This article was previously published under Q40452

SYMPTOMS

When using an equate in an ifndef block, the following error is generated
A2006: phase error between passes

CAUSE

On pass 1 if the symbol is not defined, it gets defined. On pass 2 it is defined; therefore, you get a phase error.

STATUS

Microsoft has confirmed this to be a problem in MASM versions 5.0, 5.1, and 5.1a. The problem was corrected in MASM version 6.0.

RESOLUTION

When using the equate, specify a size (with WORD PTR, for example).

MORE INFORMATION

The following sample code demonstrates the problem. In order to work around the problem change
   MOV bx, SAVE
				
to the following
   MOV bx, WORD PTR SAVE
				

Sample Code:

;Assemble options needed: none

ifndef SAVE
   SAVE EQU 1
endif

code SEGMENT
   assume cs:code

   MOV bx, SAVE

endcode:

code ENDS
    END
				

Modification Type:MajorLast Reviewed:10/17/2003
Keywords:kbfix KB40452