Article ID: 320004
Article Last Modified on 7/5/2005
APPLIES TO
- Microsoft Visual C++ .NET 2002 Standard Edition
This article was previously published under Q320004
SYMPTOMS
When you try to compile code that is similar to the sample code included in the "Steps to Reproduce the Problem" section of this article, you may receive the following error message:
CAUSE
This behavior occurs because the optimizing compiler cannot optimize the while loop.
RESOLUTION
To work around the issue, use one of the following methods:
- Turn off the /Og switch for the function by using the following command:
#pragma optimize("g",off)
- Declare the function parameter start to be volatile.
STATUS
Microsoft has confirmed that this is a bug in the Microsoft products that are listed at the beginning of this article. This bug was corrected in Microsoft Visual C++ .NET (2003).
MORE INFORMATION
Steps to Reproduce the Problem
Try to compile the following code:
//test.cpp // Compiler Option: cl /c /Og test.cpp union Pixel{ char code8; } ; struct RGB { double r; }; //#pragma optimize("g",off)//WORKAROUND 1 void func( char *start, char *end) //void func( volatile char *start, char *end) //WORKAROUND 2 { RGB map[256]; Pixel s[16]; while (start < end) { *start++ = s[(int)((map[*start].r))].code8; } } #pragma optimize("",on) //WORKAROUND 1
You receive the error message described in the "Symptoms" section of this article.
Additional query words: Og ICE KbCpp KbNative KBUnmanaged
Keywords: kberrmsg kbbug kbfix kbpending kbcompiler KB320004