> For what it's worth, I tried to recreate the ICE after removing the > trap insertion, but failed. So I'm not even sure the trap insertion > is fixing a real problem any more. It works at the moment simply > because it treats the call through a cast as a call through a function > pointer, and therefore does not inline it. > > The Objective C frontend does ICE on the test case which Yuri pointed > out, but that ICE is independent of the code in c-typeck.c. As far as > I can tell in two minutes, that's a type error in the Objective C > frontend: it passes "int d = (double) x;" to the middle-end, and the > middle-end ICEs trying to assign a double value to an int variable. > > Ian >
This is explained why gcc-4.2 does ICE in objc mode but gcc-4.1 successfully generates call even for problematic casts (with casting to void (*)() trick).