https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120674

Jeffrey A. Law <law at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2025-08-13
           Priority|P3                          |P4
     Ever confirmed|0                           |1
                 CC|                            |rdapp at gcc dot gnu.org

--- Comment #2 from Jeffrey A. Law <law at gcc dot gnu.org> ---
So the problem is a bit of hackish code we have in the RISC-V backend that
interacts badly with the dwarf2 emitter when vector is not enabled.

Essentially that code in riscv_convert_vector_chunks sets riscv_vector_chunks
to {1, 0} when RVV is not enabled.

Then in riscv_dwarf_poly_indeterminite_value we pull out that 0 ceofficient and
use that as the factor which causes this code to do a divide by zero:

              /* Add COEFF * ((REGNO / FACTOR) - BIAS) to the value:
                 add COEFF * (REGNO / FACTOR) now and subtract
                 COEFF * BIAS from the final constant part.  */ 
              constant -= coeff * bias; 
              add_loc_descr (&ret, new_reg_loc_descr (regno, 0));
              if (coeff % factor == 0)
                coeff /= factor;
              else
                {
                  int amount = exact_log2 (factor);
                  gcc_assert (amount >= 0);
                  add_loc_descr (&ret, int_loc_descriptor (amount));
                  add_loc_descr (&ret, new_loc_descr (DW_OP_shr, 0, 0));
                }

Robin, I think you added the chunk stuff a couple years back.  Was the setting
of riscv_vector_chunks to {1, 0} when RVV is not enabled meant to be a
compile-time savings by having the value collapse down?  Or is this a
correctness thing?

Reply via email to