http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50318
Bug #: 50318 Summary: ICE optimizing widening multiply-and-accumulate Classification: Unclassified Product: gcc Version: 4.7.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: tree-optimization AssignedTo: unassig...@gcc.gnu.org ReportedBy: a...@gcc.gnu.org The widening mulitply pass creates a bad expression when using constants with types that don't match the other operand: (This testcase is reduced from the Linux kernel) long long test (unsigned int sec, unsigned long long nsecs) { return (long long)(long)sec * 1000000000L + (long long)(unsigned long)nsecs; } dummy.i: In function ‘test’: dummy.i:2:11: error: type mismatch in widening multiply-accumulate expression long long int unsigned int long int long long int D.4708_8 = WIDEN_MULT_PLUS_EXPR <sec_1(D), 1000000000, D.4720_11>; dummy.i:2:11: internal compiler error: verify_gimple failed