BUG: Bad Code for Unsigned and Signed Comparisons with /Og (263609)



The information in this article applies to:

  • Microsoft Visual C++, 32-bit Enterprise Edition 6.0
  • Microsoft Visual C++, 32-bit Professional Edition 6.0
  • Microsoft Visual C++, 32-bit Learning Edition 6.0

This article was previously published under Q263609

SYMPTOMS

The compiler may generate incorrect code for a signed comparison following an unsigned same comparison when the /Og optimization is enabled.

Please refer to the sample code in the "More Information" section for details.

STATUS

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

MORE INFORMATION

Steps to Reproduce Behavior

The following sample code demonstrates the bug:
// Test.cpp
// Compiler option needed: /Og
#include <stdio.h>
int a=-1;
void main() {
	if ((unsigned int)a > 5U) {
		if (a > 5) {
			printf("%d > 5\n", a);
		} else {
			printf("%d < 0\n", a);
		}
	} else {
		printf("0 <= %d <= 5\n", a);
	}
}


				
Program Output:
-1 > 5

Modification Type:MinorLast Reviewed:7/5/2005
Keywords:kbBug kbCodeGen kbCompiler KB263609