diff --git a/gcc/testsuite/gcc.dg/pr105049.c b/gcc/testsuite/gcc.dg/pr105049.c new file mode 100644 index 00000000000..b0518c6a181 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr105049.c @@ -0,0 +1,12 @@ +/* { dg-do compile } */ +/* { dg-options "-O -fno-tree-forwprop" } */ + +typedef short __attribute__((__vector_size__ (sizeof(short)))) V; +typedef short __attribute__((__vector_size__ (2*sizeof(short)))) U; +char c; + +U +foo (void) +{ + return __builtin_shufflevector ((V){}, (V){}, 0, 0) & c; +} diff --git a/gcc/tree.cc b/gcc/tree.cc index b8017af6cfc..ec200e9a7eb 100644 --- a/gcc/tree.cc +++ b/gcc/tree.cc @@ -10266,6 +10266,8 @@ uniform_vector_p (const_tree vec) if (i != nelts) return NULL_TREE; + if (TREE_CODE (first) == CONSTRUCTOR || TREE_CODE (first) == VECTOR_CST) + return uniform_vector_p (first); return first; }