Back from vacation. Working through the group of optimizer errors. This is the reduced version. Diff the output from this program when compiled in Optimized mode vs Debug mode. The assumption is that there should be no differences if the compiler optimized correctly. /* // --- RANDOMLY GENERATED PROGRAM --- // Program Generator by Bryan Turner (bryan.turner@pobox.com) */ #include <stdio.h> unsigned long context = 0; unsigned long DEPTH = 0; void DumbHash( unsigned long value, unsigned int len ) { context += value; context ^= 0xA50F5AF0; printf( "%d\n", context ); } /* --- GLOBAL VARIABLES --- */ unsigned short g_70300438 = 0xE7CA; /* --- MAIN --- */ /* ------------------------------------------ */ int main( ) { unsigned char l_94663863 = 0xF6; long l_03324849 = 0x9A7215CB; long l_99194556 = 0xE4255F06; if ( ( ( g_70300438 || g_70300438 ) << l_94663863 ) ) { l_03324849 = l_99194556; } DumbHash( l_03324849, 4 ); }
This is an invalid program. Shifting by a value that is greater than the number of bits in the operand is undefined in C. In particular, this effectively performs: X << 0xF6 Since X is a long in this case (which is 32-bits), and 0xF6 > 31, this program is not valid. -Chris