C1001: Internal Compiler Error: regMD.c, Line 4634

ID Number: Q61972

6.00 | 6.00

MS-DOS | OS/2

buglist6.00 fixlist6.00a

Summary:

The Microsoft C Compiler version 6.0 produces the following internal

compiler error when the sample program below is compiled for compact

(/AC) or large (/AL) memory model /Ole optimization:

file.c(24) : fatal error C1001: Internal Compiler Error

(compiler file '@(#)regMD.c:1.100', line 4634)

Contact Microsoft Product Support Services

Microsoft has confirmed this to be a problem in C version 6.0. This

problem was corrected in C version 6.0a.

The following workarounds will eliminate the error in C version 6.0:

1. Use the #pragma optimize("le", off) statement at the beginning of

the module to disable optimization and the #pragma optimize("", on)

statement after the module to reenable optimization.

-or-

2. Make "c" a pointer to a character. For example, instead of

char c;

use the following:

char *c = " ";

Also, change the assignment from

c = s1[j];

to the following:

c[0] = s1[j];

Sample Code

-----------

/* Compile options needed: /AL /Ole

*/

#include <stdio.h>

#include <malloc.h>

void main ()

{

char *s1,*s2;

int len;

char c;

int j;

s1 = malloc(sizeof(char *));

s2 = malloc(sizeof(char *));

s1 = "this is junk1";

s2 = "this is junk2";

len = 10;

for(j=0; j<len; j++){

c = s1[j];

s1[j]=s2[j];

s2[j] = c; // This line causes error

}

printf (" Done swapping memory ");

}