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

Reply via email to