There is something wrong with the float access when the ?: operators are used on arm. If the body of the ?: operators contain float variables the compiler'll drop some errors. I made several crosscompiler, and I only found that arm-*-linux doesn't handle the following c code: float a; void foo(float b) { a = (b > 0 ? 1 : (b < 0 ? -1 : 0)); } Command line (arm-linux-gcc (GCC) 3.5.0 20040718): arm-linux-gcc -c -O1 foo.i Output: foo.i: In function `foo': foo.i:6: internal compiler error: in elim_reg_cond, at flow.c:3244
Actually it looks like more optimization before getting to RTL causes this to changed into what the ICE is for PR 15068.
Can you try this again as PR 15068 is fixed?
(In reply to comment #2) > Can you try this again as PR 15068 is fixed? Yep. The test case which I sent is fixed, BUT there is another regression. See the following: Second test case: double foo(double x, double y) { return (x >= 1 ? 0 : 1 - x)/y; } Cmd line (2004-08-03 08:00:00 UTC): arm-linux-gcc -c -O1 -o foo2.o foo2.i Output: foo2.i: In function `foo': foo2.i:5: internal compiler error: in elim_reg_cond, at flow.c:3247
I think I've now fixed all the remaining cases. Please re-open or refile if you find any further problems.