Hi,

This patch checks optab exists before using it vector vector statement 
lowering.  It fixes compilation of test from PR68062 with -funsigned-char 
option added (doesn't fix original testcase).  Bootstrapped for 
x86_64-unknown-linux-gnu.  OK for trunk if no regressions?

Thanks,
Ilya
--
gcc/

2015-10-23  Ilya Enkovich  <enkovich....@gmail.com>

        * tree-vect-generic.c (expand_vector_operations_1): Check
        optab exists before use it.

gcc/testsuite/

2015-10-23  Ilya Enkovich  <enkovich....@gmail.com>

        * g++.dg/pr68062.C: New test.


diff --git a/gcc/testsuite/g++.dg/pr68062.C b/gcc/testsuite/g++.dg/pr68062.C
new file mode 100644
index 0000000..236a488
--- /dev/null
+++ b/gcc/testsuite/g++.dg/pr68062.C
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-options "-funsigned-char" } */
+
+typedef char __attribute__ ((vector_size (4))) v4qi;
+typedef unsigned char __attribute__ ((vector_size (4))) uv4qi;
+
+v4qi v;
+void ret(char a)
+{
+  v4qi c={a,a,a,a};
+  uv4qi d={a,a,a,a};
+  v = (c!=d);
+}
diff --git a/gcc/tree-vect-generic.c b/gcc/tree-vect-generic.c
index 2005383..9c59402 100644
--- a/gcc/tree-vect-generic.c
+++ b/gcc/tree-vect-generic.c
@@ -1533,7 +1533,8 @@ expand_vector_operations_1 (gimple_stmt_iterator *gsi)
       && TYPE_MODE (TREE_TYPE (type)) == TYPE_MODE (TREE_TYPE (srhs1)))
     {
       op = optab_for_tree_code (code, TREE_TYPE (type), optab_scalar);
-      if (optab_handler (op, TYPE_MODE (TREE_TYPE (type))) != CODE_FOR_nothing)
+      if (op != unknown_optab
+         && optab_handler (op, TYPE_MODE (TREE_TYPE (type))) != 
CODE_FOR_nothing)
        {
          tree slhs = make_ssa_name (TREE_TYPE (srhs1));
          gimple *repl = gimple_build_assign (slhs, code, srhs1, srhs2);

Reply via email to