So that ICE still exist for objective-c and is just hidden with
warn/trap workaround
for c/c++:
double foo(double arg)
{
return arg;
}
int bar(int d)
{
d = ((int (*) (int)) foo)(d);
return d *d;
}
If you compile the above example in objective-c mode (gcc -O3 -x
objective-c),
current mainline as well as all 3.4.2 ... 4.1 versions hits an ICE:
[EMAIL PROTECTED] ~/tmp $ gcc-4.2 -O3 -x objective-c bbb1.c -S
bbb1.c: In function 'bar':
bbb1.c:8: internal compiler error: Segmentation fault
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://bugs.gentoo.org/> for instructions.
Preprocessed source stored into /tmp/ccO8k5QS.out file, please attach
this to your bugreport.
[EMAIL PROTECTED] ~/tmp $ gcc-3.4.5 -O3 -x objective-c bbb1.c -S
bbb1.c: In function `bar':
bbb1.c:3: internal compiler error: in convert_move, at expr.c:564
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://bugs.gentoo.org/> for instructions.
Preprocessed source stored into /tmp/ccj3pUVx.out file, please attach
this to your bugreport.
Original PR/12085 fix was proposed to simply not inline function call:
http://gcc.gnu.org/ml/gcc-patches/2003-12/msg00683.html.
2003-12-07 Eric Botcazou <[EMAIL PROTECTED]>
PR optimization/12085
* tree-inline.c (expand_call_inline): Do not inline functions at
calling points where they are viewed with too different a prototype
than the actual one.
But later it has been changed to warn/trap for c/c++ mode, leaving ICE
for objc intact:
http://gcc.gnu.org/ml/gcc-patches/2003-12/msg01767.html
2003-12-19 Eric Botcazou <[EMAIL PROTECTED]>
PR c/12085
* c-typeck.c (build_function_call): Issue a warning if a
function is called through an incompatible prototype and
replace the call by a trap in this case.
May be it's time to implement better fix for that ICE than generating
trap instead of actual call
for all (even valid on a particular platform) function pointer conversions?
Can someone make the decision to reopen PR optimization/12085?