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.