FIX: System Hang with /Oe Option and Switch Statements

ID: 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 
Version           : 1.00
Platform          : WINDOWS 
Issue type        : 

Last Reviewed: July 20, 1999