Microsoft KB Archive/150572

= FIX: Error C1001: _asm Instruction Accessing Stack Using [ebp] =

Article ID: 150572

Article Last Modified on 12/2/2003

-

APPLIES TO


 * Microsoft Visual C++ 2.0 Professional Edition
 * Microsoft Visual C++ 2.1
 * Microsoft Visual C++ 2.2
 * Microsoft Visual C++ 4.0 Standard Edition
 * Microsoft Visual C++ 4.2 Enterprise Edition
 * Microsoft Visual C++ 5.0 Enterprise Edition
 * Microsoft Visual C++ 6.0 Enterprise Edition
 * Microsoft Visual C++ 4.2 Professional Edition
 * Microsoft Visual C++ 5.0 Professional Edition
 * Microsoft Visual C++ 6.0 Professional Edition
 * Microsoft Visual C++ 6.0 Standard Edition

-



This article was previously published under Q150572



SYMPTOMS
Inline assembly code that uses [ebp] to gain access to arguments or local variables on the stack results in this error:

fatal error C1001: INTERNAL COMPILER ERROR

(compiler file '\school.tp3\test\c10\src\P2\386\codegen.c', line 4040)



CAUSE
When an argument is passed to a function, or a local variable is declared in a function, the argument or variable is placed on the stack, and is already referenced in terms of [ebp]. When [ebp] is used explicitly to reference that argument or variable as in ccb[ebp], for example, the compiler adds [ebp] again, resulting in an illegal address. The compiler fails to catch this as a meaningful error, and instead generates error C1001.



RESOLUTION
Do not attempt to gain access to stack arguments or variables in terms of [ebp].

NOTE: In the sample code in this article, lcb[ebp] and ccb[ebp] are invalid references; lcb and ccb need to be referenced directly. Otherwise, the compiler does not catch the illegal reference.



STATUS
Microsoft has confirmed this to be a bug in the Microsoft products listed at the beginning of this article.

This problem was corrected in Microsoft Visual C++ 6.0 Service Pack 5.



Sample Code
/* Compile options needed:none


 * 1) include 

void masmfunc(DWORD ccb){

_asm mov eax ,dword ptr ccb[ebp];  //C1001

//Or, // DWORD lcb = 20;

// _asm mov eax ,dword ptr lcb[ebp];  //C1001

}

Additional query words: kbVC400bug

Keywords: kbbug kbfix kbnoupdate kbcompiler KB150572

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.