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

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |jakub at gcc dot gnu.org

--- Comment #5 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
It is a pitty we accept vector types with enum element type at all, e.g. for
_Complex we reject those.
Anyway, guess my preference would be to only add the tcode? == ENUMERAL_TYPE
cases for
code? == VECTOR_TYPE, i.e.
--- gcc/c/c-typeck.cc   2026-01-14 13:21:06.130656198 +0100
+++ gcc/c/c-typeck.cc   2026-01-14 13:42:52.341719973 +0100
@@ -14452,8 +14452,10 @@ build_binary_op (location_t location, en
          if (code1 == COMPLEX_TYPE || code1 == VECTOR_TYPE)
            tcode1 = TREE_CODE (TREE_TYPE (TREE_TYPE (op1)));

-         if (!(((tcode0 == INTEGER_TYPE || tcode0 == BITINT_TYPE)
-                && (tcode1 == INTEGER_TYPE || tcode1 == BITINT_TYPE))
+         if (!(((tcode0 == INTEGER_TYPE || tcode0 == BITINT_TYPE
+                 || (tcode0 == ENUMERAL_TYPE && code0 == VECTOR_TYPE))
+                && (tcode1 == INTEGER_TYPE || tcode1 == BITINT_TYPE
+                    || (tcode1 == ENUMERAL_TYPE && code1 == VECTOR_TYPE)))
                || (tcode0 == FIXED_POINT_TYPE && tcode1 == FIXED_POINT_TYPE)))
            resultcode = RDIV_EXPR;
          else
--- gcc/cp/typeck.cc    2026-01-02 09:56:10.116337377 +0100
+++ gcc/cp/typeck.cc    2026-01-14 13:44:30.581076138 +0100
@@ -5790,7 +5790,10 @@ cp_build_binary_op (const op_location_t
          if (tcode1 == COMPLEX_TYPE || tcode1 == VECTOR_TYPE)
            tcode1 = TREE_CODE (TREE_TYPE (TREE_TYPE (op1)));

-         if (!(tcode0 == INTEGER_TYPE && tcode1 == INTEGER_TYPE))
+         if (!((tcode0 == INTEGER_TYPE
+                || (tcode0 == ENUMERAL_TYPE && code0 == VECTOR_TYPE))
+               && (tcode1 == INTEGER_TYPE
+                   || (tcode1 == ENUMERAL_TYPE && code1 == VECTOR_TYPE))))
            resultcode = RDIV_EXPR;
          else
            {

Scalar ENUMERAL_TYPEs should have gone through integral promotions at this
point, but it doesn't hurt to make it clear this is solely about vector enums.

Reply via email to