FIX: System Hang with /Oe Option and Switch Statements

Q114073


The information in this article applies to:


SYMPTOMS

When compiling a source module, the C/C++ compiler may cause the system to hang and not respond if all of the following conditions exist:

  1. The code is being compiled with the /Oe (Enable Global Register Allocation) optimization.


  2. The source code contains a switch statement where the switch expression contains a function call. For example:
    
           switch ( my_fcn( 100 ) ) { ... } 


  3. The same function that contains the switch statement has a call to setjmp().



RESOLUTION

To work around the problem, change the switch statement so the switch expression does not contain a function call. Alternatively, avoid using /Oe when compiling the module, or use the #pragma optimize() directive to disable /Oe for the function with the switch statement. For example, place the following statement before the function containing the switch statement:


    #pragma optimize( "e", off ) // Disables /Oe 
and the following statement after the function:

    #pragma optimize( "", on )   // Re-enables /Oe 


STATUS

Microsoft has confirmed this to be a problem in the C/C++ compiler for MS-DOS version 8.0. This problem was corrected in the C/C++ compiler for MS-DOS version 8.0c, included with Visual C++ for Windows, version 1.5.

Additional query words: 1.00 8.00

Keywords : kb16bitonly kbCompiler
Issue type :
Technology : kbVCsearch kbAudDeveloper kbCVCComp


Last Reviewed: May 5, 2001
© 2001 Microsoft Corporation. All rights reserved. Terms of Use.