[Bug target/70290] -mavx512vl breaks parsing of C++ vector condition

ienkovich at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Fri Mar 18 13:23:00 GMT 2016


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

--- Comment #3 from Ilya Enkovich <ienkovich at gcc dot gnu.org> ---
In build_conditional_expr_1 we check if used condition is a result of another
VEC_COND_EXPR and then may just re-use condition of that VEC_COND_EXPR.

In that case we deal with boolean vector as a condition type instead of integer
vector.  That confuses following type checkers since boolean vector size may
not match integer vector size in case of scalar masks.

I try a fix which always uses original condition type.  It helps for both
provided tests.

diff --git a/gcc/cp/call.c b/gcc/cp/call.c
index 1edbce8..d3a256c 100644
--- a/gcc/cp/call.c
+++ b/gcc/cp/call.c
@@ -4634,6 +4634,8 @@ build_conditional_expr_1 (location_t loc, tree arg1, tree
arg2, tree arg3,

   if (VECTOR_INTEGER_TYPE_P (TREE_TYPE (arg1)))
     {
+      tree arg1_type = TREE_TYPE (arg1);
+
       /* If arg1 is another cond_expr choosing between -1 and 0,
         then we can use its comparison.  It may help to avoid
         additional comparison, produce more accurate diagnostics
@@ -4653,7 +4655,6 @@ build_conditional_expr_1 (location_t loc, tree arg1, tree
arg2, tree arg3,
          || error_operand_p (arg3))
        return error_mark_node;

-      tree arg1_type = TREE_TYPE (arg1);
       arg2_type = TREE_TYPE (arg2);
       arg3_type = TREE_TYPE (arg3);


More information about the Gcc-bugs mailing list