Microsoft KB Archive/271874

= BUG: Global Optimizations Generate Incorrect Code When Using unions in a Loop =

Article ID: 271874

Article Last Modified on 7/5/2005

-

APPLIES TO


 * Microsoft Visual C++ 6.0 Enterprise Edition
 * Microsoft Visual C++ 6.0 Professional Edition
 * Microsoft Visual C++ 6.0 Standard Edition

-



This article was previously published under Q271874



SYMPTOMS
When a union value is modified by one member variable in a loop, but read by another variable in the same loop, global optimizer incorrectly moves the modification operation to outside the loop, which results in incorrect code generation.

Please refer to the sample code in the &quot;More Information&quot; section for details.



RESOLUTION
To work around the bug, turn off global optimization by using #pragma optimize.



STATUS
Microsoft has confirmed that this is a bug in the Microsoft products that are listed at the beginning of this article.



Steps to Reproduce Behavior
The following sample code demonstrates the bug: // Test.cpp // Compiler option needed: /Og

//#pragma optimize(&quot;g&quot;,off) //Uncomment this line to work around the problem. int main {   LARGE_INTEGER data; // union data.HighPart = 0; data.LowPart = 0; int count = 4;
 * 1) include 
 * 2) include 

for (int k = 0; k < count; k++, data.LowPart++) printf(&quot;%I64d\t&quot;, data.QuadPart); return 0; }

Output:

0 0 0 0

Correct Output:

0 1 2 3

Keywords: kbbug kbcodegen kbcompiler KB271874

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.