Microsoft KB Archive/102162

{|
 * width="100%"|

FIX: Bad Jump Calculated in Function Containing an _asm Block

 * }

Q102162

7.00 | 1.00 MS-DOS | WINDOWS kbtool kbfixlist kbbuglist -- The information in this article applies to: - The Microsoft C/C++ Compiler (CL.EXE), included with: - Microsoft C/C++ for MS-DOS, version 7.0 - Microsoft Visual C++ for Windows, version 1.0 -- SYMPTOMS ======== An attempt to run an application fails. When the application runs in the Microsoft Windows operating system, a General Protection (GP) fault occurs. In the MS-DOS operating system, the application may hang or cause the system to crash. CAUSE ===== The C++ optimizing compiler generates a bad jump target in the return of a function when the function includes an _asm block that contains floating-point instructions. RESOLUTION ========== There are two methods to work around this problem: - Specify the /f compiler option switch to compile the code with the fast compiler. - Change the name of the source file or specify the /Tc compiler option switch to compile the code with the C compiler. STATUS ====== Microsoft has confirmed this to be a bug in the products listed above. This problem was corrected in Visual C++ for Windows, version 1.5. This problem does not occur in Visual C++, 32-bit Edition, version 1.0. MORE INFORMATION ================ The following code example demonstrates this problem: Sample Code --- /* * Compiler options needed: /f- /AL to demonstrate problem * Optional additional options: /Od /Zi */ void tdt(double x) { _asm { fld x f2xm1 ; fptan also causes a bad jmp calculation fwait } // Bad JMP instruction } void main { double x1 = 0.4; tdt(x1); } Additional reference words: 1.00 7.00 8.00 KBCategory: kbtool kbfixlist kbbuglist KBSubcategory: CLIss

Keywords : kb16bitonly kbCompiler

Issue type :

Technology : kbVCsearch kbAudDeveloper kbCVCComp