DOCUMENT:Q125799 23-JUL-2001 [visualc] TITLE :FIX: C2443 Using Structure Member Operand in _asm Block PRODUCT :Microsoft C Compiler PROD/VER:winnt:1.0,2.0,2.1,4.0,4.1,4.2,5.0 OPER/SYS: KEYWORDS:kbVC100bug kbVC150bug kbVC152bug kbVC200bug kbVC210bug kbVC400bug kbVC410bug kbVC420bug ====================================================================== ------------------------------------------------------------------------------- The information in this article applies to: - The C/C++ Compiler (CL.EXE), used with: - Microsoft Visual C++, 32-bit Editions, versions 1.0, 2.0, 2.1, 4.0, 4.1 - Microsoft Visual C++, 32-bit Enterprise Edition, version 4.2 - Microsoft Visual C++, 32-bit Professional Edition, version 4.2 - Microsoft Visual C++, 32-bit Enterprise Edition, version 5.0 - Microsoft Visual C++, 32-bit Professional Edition, version 5.0 - Microsoft Visual C++ for Windows, 16-bit edition, versions 1.0, 1.5, 1.52 ------------------------------------------------------------------------------- SYMPTOMS ======== Under the four conditions described in this article, the following compiler error is generated: test.cpp(linenumber) : error C2443: operand size conflict Here linenumber is the assembly instruction in TEST.CPP file that meets the following conditions. This error occurs when the following four conditions are met: - You're using inline assembly. - The size of the source operand on an assembly instruction is different from the size of the destination operand. - The source operand is a member of a structure. - The PTR operator is used to force the operand to the size required. RESOLUTION ========== If you are using C++, declare a reference variable initialized with the structure member. Use the reference variable as the source operand in the assembly instruction as shown in this sample code: Sample Code ----------- /* Compile options needed: /Tp */ truct Test { int nInt; } test1; void main(void) { __asm mov bh, BYTE PTR test1.nInt /* error occurs here */ int & nTest = test1.nInt; /* these lines work */ __asm mov bh, BYTE PTR nTest /* these lines work */ } If you are using C, use a local variable instead of a reference variable. STATUS ====== This bug was corrected in Microsoft Visual C++, version 6.0. Additional query words: CPP CXX MASM assembler macro ====================================================================== Keywords : kbVC100bug kbVC150bug kbVC152bug kbVC200bug kbVC210bug kbVC400bug kbVC410bug kbVC420bug kbVC500bug kbVC600fix Technology : kbVCsearch kbAudDeveloper kbCVCComp Version : winnt:1.0,2.0,2.1,4.0,4.1,4.2,5.0 Issue type : kbbug Solution Type : kbfix ============================================================================= THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY. Copyright Microsoft Corporation 2001.