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

            Bug ID: 110193
           Summary: d_signed_or_unsigned_type is invoked for vector types
           Product: gcc
           Version: 14.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: d
          Assignee: ibuclaw at gdcproject dot org
          Reporter: rguenth at gcc dot gnu.org
  Target Milestone: ---

It looks like this function (via a langhook) is invoked on VECTOR_TYPE and
the implementation assumes it works on integer types only:

  if (TYPE_PRECISION (type) == TYPE_PRECISION (d_cent_type))
    return unsignedp ? d_ucent_type : d_cent_type;

  if (TYPE_PRECISION (type) == TYPE_PRECISION (d_long_type))
    return unsignedp ? d_ulong_type : d_long_type;
...

TYPE_PRECISION for vectors is TYPE_VECTOR_SUBPARTS so in this case
for any V8mode vector we'd return d_{u,}cent_type.  The C familiy
frontend similar routine does

  type1 = TYPE_MAIN_VARIANT (type);
  if (type1 == signed_char_type_node || type1 == char_type_node || type1 ==
unsigned_char_type_node)
    return unsignedp ? unsigned_char_type_node : signed_char_type_node;
  if (type1 == integer_type_node || type1 == unsigned_type_node)
    return unsignedp ? unsigned_type_node : integer_type_node;

...

Reply via email to