FIX: M6110 Error When Using 'switch' Statement with /OeLast reviewed: September 18, 1997Article ID: Q114075 |
7.00 | 1.00
MS-DOS | WINDOWS
kbtool kbfixlist kbbuglist
The information in this article applies to:
SYMPTOMSIn certain cases the C/C++ compiler will generate incorrect code when the /Oe (Enable Global Register Allocation) optimization is used on source code which does floating point calculations before a switch statement. The compiler does not correctly generate code to clear the floating point stack after the floating point calculations have been performed. This causes a floating point stack overflow when the calculations are done repeatedly. When the program is run it will fail and display the following error message:
run-time error M6110: MATH - floating-point error: stack overflowThe problem can be reproduced by building and running the sample code shown below.
RESOLUTIONTo work around the problem, use the #pragma optimize() directive to disable /Oe for the function where the M6110 error occurs. This is indicated in the sample code below. Alternatively, the module containing the function could be compiled without the /Oe option.
STATUSMicrosoft has confirmed this to be a problem in the Microsoft products listed above. This problem was corrected in Visual C++ version 1.5.
Sample Code
/* Compile options needed: /Oe (or /O2, or /Ox, both include /Oe) */ #include <stdio.h> /* uncomment the #pragmas to correct the problem#pragma optimize( "e", off ) */ int main(){ int count; float flt1, flt2; for ( count = 1; count <= 50; count++ ) { flt1 = 1.5F * count; flt2 = 2.0F * count; switch ( count ) { default: printf( "In loop...\n" ); } } printf( "Test was successful!\n" ); return (int)( flt1 + flt2 );}
/*#pragma optimize( "e", on ) */ |
Additional reference words: 7.00 8.00 1.00
© 1998 Microsoft Corporation. All rights reserved. Terms of Use. |