ICE optimizing widening multiply-and-accumulate
Bug #843775 reported by
Andrew Stubbs
This bug affects 1 person
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
Linaro GCC |
Fix Released
|
High
|
Andrew Stubbs | ||
4.6-2011.07-stable |
Invalid
|
Undecided
|
Unassigned | ||
gcc |
Fix Released
|
Medium
|
Bug Description
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_
dummy.i:2:11: internal compiler error: verify_gimple failed
Changed in gcc: | |
importance: | Unknown → Medium |
status: | Unknown → In Progress |
Changed in gcc-linaro: | |
importance: | Undecided → High |
Changed in gcc: | |
status: | In Progress → Fix Released |
Changed in gcc-linaro: | |
status: | In Progress → Fix Committed |
Changed in gcc-linaro: | |
status: | Fix Committed → Fix Released |
To post a comment you must log in.
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’: PLUS_EXPR <sec_1(D), 1000000000, D.4720_11>;
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_
dummy.i:2:11: internal compiler error: verify_gimple failed