ID: Q115526
1.00 1.50 WINDOWS kbtool kbbuglist
The information in this article applies to:
- Microsoft Visual C++ for Windows, versions 1.0 and 1.5
Compiling the sample code shown below using the /Ot, /Ob2, or /Gr options causes the optimizing compiler to generate the following error:
fatal error C1001: internal compiler error
(compiler file '@(#)pgoMD2.c:1.23', line 681)
Compiling the sample code with the switches listed above also causes
the compiler to generate the following warning:
warning C4124: __fastcall with stack checking is inefficient
However, compiling the code with /Gs to turn off stack checking does
not avoid the C1001 error.
To avoid the problem, do one of the following:
-or-
Microsoft has confirmed this to be a bug in the Microsoft products listed above. We are researching this bug and will post new information here in the Microsoft Knowledge Base as it becomes available.
This is not a problem in Visual C++, 32-bit Edition.
/* Compile options needed: /Otb2 /Gr
*/
#include <stdio.h>
int main(void);
int fail_count = 0;
void fail(int line)
{
printf("failed line %d\n",line);
fail_count++;
}
void checke (int a, int b)
{
if (a != b)
printf ("Not equal\n");
}
typedef int (*func_ptr_elip_arg)(...);
typedef int (*func_ptr_uint_arg)(unsigned);
int f(unsigned);
int g(func_ptr_elip_arg p)
{
return p(1);
}
int g(func_ptr_uint_arg p)
{
return p(2);
}
int f(unsigned u)
{
return u * 4;
}
// Uncomment the following pragma to allow this to compile
//#pragma optimize ( "", off )
int main(void)
{
checke(g((int(*)(...))&f),4);
if(!fail_count)
printf("passed\n");
return fail_count;
}
Additional reference words: 1.00 1.50 8.00 8.00c
KBCategory: kbtool kbbuglist
KBSubcategory: CLIss
Keywords : kb16bitonly
Last Reviewed: July 23, 1997