Microsoft KB Archive/114069

{|
 * width="100%"|

FIX: C4713: reg86.c, line 3799

 * }

Q114069

1.00 WINDOWS kbtool kbfixlist kbbuglist -- The information in this article applies to: - The Microsoft C/C++ Compiler (CL.EXE), included with: - Microsoft Visual C++ for Windows, version 1.0 -- SYMPTOMS ======== The compiler generates the following internal compiler error message when the sample program below is compiled with /Oe or /Ox. warning C4713: func: internal compiler error; restarting (compiler file '@(#)reg86.c:1.26', line 3799) The internal compiler error is triggered by using the global register allocation optimization (/Oe). Note that global register allocation is included with the /Ox compiler option. RESOLUTION ========== The C4713 message is just a warning. The compiler realizes a problem has occurred due to the global register allocation optimization and restarts the compile without the optimization. To avoid the message, one option is to use the fast compiler (/f) instead of the optimizing compiler. Another option is to disable the global register allocation optimization. This can be done by either not using the /Oe or /Ox options on the command line or by using #pragma optimize to disable the optimization in the source file. The comments in the sample below demonstrate using the #pragma to work around the problem. STATUS ====== Microsoft has confirmed this to be a problem in the Microsoft products listed above. This is not a problem in Visual C++, 32-bit Edition. This problem was corrected in Visual C++ version 1.5. Sample Code --- /* Compile options needed: /c /f- /Oe */ typedef char ARRAY[8]; typedef struct _table1 { ARRAY aItem[4]; } TABLE1; typedef struct _table2 { int nItem; union { TABLE1 far * t1Item; }; } TABLE2; typedef struct _table3 { TABLE2 t2Item[4]; } TABLE3; // Uncomment for work around // #pragma optimize ("e", off) void func( TABLE3 far * t3Param, int nParam) { TABLE2 far * pt2Local1; TABLE2 far * pt2Local2; int nLocal1; int nLocal2; ARRAY far * paLocal; int nIndex; pt2Local1 = &t3Param->t2Item[2]; pt2Local2 = &t3Param->t2Item[1]; nLocal1 = pt2Local1->nItem; nLocal2 = pt2Local2->nItem; if (nParam) paLocal = pt2Local1->t1Item->aItem; for (nIndex = 0; nIndex < nLocal2; ) nIndex++; } // Uncomment for work around // #pragma optimize ("", on) Additional reference words: 8.00 1.00 KBCategory: kbtool kbfixlist kbbuglist KBSubcategory: CLIss

Keywords : kb16bitonly kbCompiler

Issue type :

Technology : kbVCsearch kbAudDeveloper kbCVCComp