Microsoft KB Archive/114073

{|
 * width="100%"|

FIX: System Hang with /Oe Option and Switch Statements

 * }

Q114073

-

The information in this article applies to:


 * The C/C++ Compiler (CL.EXE), included with:
 * Microsoft Visual C++, version 1.0

-

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:

 The code is being compiled with the /Oe (Enable Global Register Allocation) optimization.  The source code contains a switch statement where the switch expression contains a function call. For example:       switch ( my_fcn( 100 ) ) { ... }  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