On Jun 26, 2007, Bernd Schmidt wrote: > This fails as below. Thanks. I've fixed these and then some, then re-tested on both i686-linux-gnu and x86_64-linux-gnu, no regressions. > At this point I think I'd prefer if we could apply the earlier > stable patch first and then do enhancements on top of it. After some of the problems I caught in this last round, I'm no longer comfortable installing the earlier "stable" patch. There were some type compatibility and sign extension problems that hadn't been exposed by testing but that were there, and I fear they might break stuff. Please consider this revised patch instead. The changes from the last patch are: - convert bit-field operands to bitsizetype before doing size_binop arithmetic with them. This is what caused the ICEs you've found on x86. Some other parts of the compiler create BIT_FIELD_REFs with non-sizetype operands. - use size_binop all over instead of int_const_binop, for stronger type safety, except in the few places where we're building integral constants rather than sizes - in sra_build_assignment, use the correct type for the temp variable that should hold the result of converting var to the same-sized unsigned integral type (this was wrong in the "stable" patch) - in sra_build_bf_assignment, use the correct type to decide whether the incoming variable needs conversion to an unsigned integral type, and convert it to the unsigned type instead of doing bit arithmetic between operands with different signedness - in sra_build_bf_assignment, filter-out sign-extension bits from the input operand being replaced in a wider variable - in sra_build_bf_assignment, make sure we convert the input field to the correct unsigned type instead of relying on implicit type conversion by the left shift. I went through the type conversions, expressions and assignments in the patch one more time, and I couldn't find any other mismatches. Ok?