BUG: Error C1001: _asm Instruction Accessing Stack Using [ebp]ID: Q150572
|
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)
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.
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.
Microsoft has confirmed this to be a bug in the Microsoft products listed at the beginning of this article.
/* Compile options needed:none
*/
#include <windows.h>
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 : kbCompiler kbVC200bug kbVC210bug kbVC220bug kbVC400bug kbVC410bug kbVC420bug kbVC500bug kbVC600bug
Version : winnt:2.0,2.1,2.2,4.0,4.2,5.0,6.0
Platform : winnt
Issue type : kbbug
Last Reviewed: May 14, 1999