KnowledgeBase Archive

An Archive of Early Microsoft KnowledgeBase Articles

View on GitHub

Q61620: Internal Compiler Error ‘@(#)regMD.c:1.100’ Line 3837

Article: Q61620
Product(s): See article
Version(s): 6.00   | 6.00
Operating System(s): MS-DOS | OS/2
Keyword(s): ENDUSER | buglist6.00 | mspl13_c
Last Modified: 29-MAY-1990

The following sample code produces an internal compiler error when
compiled with /Oie (intrinsic AND global register allocation) options
under large and compact memory models:

   prog.c(17) : fatal error C1001: Internal Compiler Error
                (compiler file '@(#)regMD.c:1.00', line 3837)
                Contact Microsoft Product Support Services

Sample Code
-----------

unsigned x[4];
int *y;
int z;

void f1(void)
{
}

// #pragma function(memcpy)  This is one workaround.
// #pragma optimize("e", off)  This is another.
// #pragma optimize("i", off)  This is a third.

void f2(void)
{
   int i;

   for(i=0;i<4;i++)
      if(i<x[1])
         memcpy(&z,&(y[i]),2);
}
// #pragma intrinsic(memcpy) Turn intrinsics back on.
// #pragma optimize("e", on) Turn global register allocation back on.
// #pragma optimize("i", on) Turn intrinsics back on.

Placing the #pragma function(memcpy) in the code causes the compiler
to generate a function call to memcpy rather than to make it
intrinsic. Using the optimize pragma turns off the offending
optimization for that section of code. Since both /Oi and /Oe are
needed to cause the error, either pragma will work around the problem.

Microsoft has confirmed this to be a problem with C version 6.00. We
are researching this problem and will post new information here as it
becomes available.

THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.

Copyright Microsoft Corporation 1986-2002.