Am 19.11.24 um 13:31 schrieb Andreas Schwab:
../../gcc/config/avr/avr-passes.cc: In member function ‘void {anonymous}::memento_t::apply_insn1(rtx_insn*, bool)’: ../../gcc/config/avr/avr-passes.cc:2119:9: error: no match for ‘operator&=’ (operand types are ‘{anonymous}::gprmask_t’ {aka ‘unsigned int’} and ‘HARD_REG_SET’) 2119 | known &= ~rset; | ~~~~~~^~~~~~~~ In file included from ../../gcc/coretypes.h:513, from ../../gcc/config/avr/avr-passes.cc:27: ../../gcc/dumpfile.h:240:1: note: candidate: ‘dump_flags_t& operator&=(dump_flags_t&, dump_flags_t)’ 240 | operator&= (dump_flags_t &lhs, dump_flags_t rhs) | ^~~~~~~~ ../../gcc/dumpfile.h:240:45: note: no known conversion for argument 2 from ‘HARD_REG_SET’ to ‘dump_flags_t’ {aka ‘dump_flag’} 240 | operator&= (dump_flags_t &lhs, dump_flags_t rhs) | ~~~~~~~~~~~~~^~~ make[2]: *** [../../gcc/config/avr/t-avr:65: avr-passes.o] Error 1
Thank you. Presumably that's on a host (i386?) where HARD_REG_SET is not a scalar but an array of HARD_REG_ELT_TYPEs? Does it build with the following patch that should fix it: diff --git a/gcc/config/avr/avr-passes.cc b/gcc/config/avr/avr-passes.cc index 2b67f9fa32c..3d55cf885c2 100644 --- a/gcc/config/avr/avr-passes.cc +++ b/gcc/config/avr/avr-passes.cc @@ -2116,7 +2116,7 @@ memento_t::apply_insn1 (rtx_insn *insn, bool unused) HARD_REG_SET rset; find_all_hard_reg_sets (insn, &rset, true /* implicit */); - known &= ~rset; + (*this) &= ~rset; rtx set = single_set (insn); rtx dest; Johann