home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 14 Text
/
14-Text.zip
/
C6_BUGS.ZIP
/
C6_20090.BUG
< prev
next >
Wrap
Text File
|
1990-09-11
|
2KB
|
65 lines
Q64564 Internal Compiler Error: '@(#)regMD.c:1.100' Line 929
Microsoft C Compiler (C)
6.00 | 6.00
MS-DOS | OS/2
Summary:
The code below, when compiled using Microsoft C 6.00, produces the
following error:
foo.c(15) : fatal error C1001: Internal Compiler Error
(compiler file '@(#)regMD.c:1.100', line 929)
Contact Microsoft Product Support Services
Sample Code
-----------
// Compile using 'cl -Od':
#define Rev(x) ( ( (x) >> 24 ) | \
( ( (x) & 0xff0000 ) >> 8 ) | \
( ( (x) & 0x00ff00 ) << 8 ) | \
( (x) << 24) )
#define Get(x,y) \
(((x) == 183) ? (y) : Rev(y))
void main (void)
{
long l;
long *pl;
int Order;
l = Get(Order,*pl); // This line causes the error.
}
More Information:
The workaround for this problem is to either compile using the "-qc"
option or to simplify the expression.
One way of simplifying the above nested macro expression is to call
each macro separately. For instance, the following is a feasible
workaround:
1. Redefine the Get macro as follows:
#define Get(x,y,z) \
((((x) == 183) ? (y) : (z))
2. Then for every call to the Get macro, use the following two
statements:
temp = Rev(x);
l = Get(Order,*pl,temp);
Microsoft has confirmed this to be a problem with the C Compiler
version 6.00. We are researching this problem and will post new
information here as it becomes available.
Keywords: buglist6.00
COPYRIGHT Microsoft Corporation, 1990.
Updated 90/09/01 08:26