Hi Jan-Benedict!
On 2025-06-05T10:24:35+0200, Jan-Benedict Glaw <[email protected]> wrote:
> On Tue, 2025-04-15 00:22:26 +0200, Thomas Schwinge <[email protected]>
> wrote:
>> diff --git a/gcc/except.cc b/gcc/except.cc
>> index d5eb9274a62..205811c6567 100644
>> --- a/gcc/except.cc
>> +++ b/gcc/except.cc
>> @@ -970,12 +970,26 @@ expand_dw2_landing_pad_for_region (eh_region region)
>> { /* Nothing */ }
>>
>> if (region->exc_ptr_reg)
>> - emit_move_insn (region->exc_ptr_reg,
>> - gen_rtx_REG (ptr_mode, EH_RETURN_DATA_REGNO (0)));
>> + {
>> + rtx exc_ptr_reg;
>> + if (EH_RETURN_DATA_REGNO (0) != INVALID_REGNUM)
>
> This ...
>
>> + exc_ptr_reg = gen_rtx_REG (ptr_mode, EH_RETURN_DATA_REGNO (0));
>> + else
>> + /* The target must be doing something special. Submit a dummy. */
>> + exc_ptr_reg = constm1_rtx;
>> + emit_move_insn (region->exc_ptr_reg, exc_ptr_reg);
>> + }
>> if (region->filter_reg)
>> - emit_move_insn (region->filter_reg,
>> - gen_rtx_REG (targetm.eh_return_filter_mode (),
>> - EH_RETURN_DATA_REGNO (1)));
>> + {
>> + rtx filter_reg;
>> + if (EH_RETURN_DATA_REGNO (1) != INVALID_REGNUM)
>
> ...and this result in an signed <-> unsigned warning for targets
> that implement EH_RETURN_DATA_REGNO as a function (which usually
> returns just int), affecting at least m32c and mmix.
So shouldn't these signed 'int's get fixed up? Per my understanding,
GCC register numbers explicitly are 'unsigned int':
gcc/rtl.h:extern rtx gen_rtx_REG (machine_mode, unsigned int);
gcc/rtl.h:#define INVALID_REGNUM (~(unsigned int) 0)
Grüße
Thomas