double __attribute__((sseregparm)) mysin(double); double __attribute__((sseregparm)) (*mysinfp)(double) = mysin; double bar(double x) { return mysinfp(x); }
results in mysinfp as sibling call inside bar, wrongly thinking we return on the FP stack from mysinfp. This may happen in other cases / on other targets in similar situations, but I couldn't come up with a testcase that does not use sseregparm to change the return value ABI. rth kindly suggested how to possibly fix this: http://gcc.gnu.org/ml/gcc/2005-07/msg00255.html -- Summary: Return value register not correctly computed for indirect function call Product: gcc Version: 4.1.0 Status: UNCONFIRMED Keywords: wrong-code Severity: normal Priority: P2 Component: middle-end AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: rguenth at gcc dot gnu dot org CC: gcc-bugs at gcc dot gnu dot org GCC target triplet: i686-unknown-linux-gnu http://gcc.gnu.org/bugzilla/show_bug.cgi?id=22347