Hi!

If some argument is nameless, then it can be only vector kind, because
it is impossible to use clauses on such argument.  It doesn't make much
sense to use that (it is inefficient), but we shouldn't ICE on it.

Bootstrapped/regtested on x86_64-linux and i686-linux, committed to trunk
so far.

2016-11-21  Jakub Jelinek  <ja...@redhat.com>

        PR middle-end/67335
        * omp-simd-clone.c (simd_clone_adjust_argument_types): Use NULL prefix
        for tmp simd array if DECL_NAME (parm) is NULL.

        * g++.dg/vect/simd-clone-7.cc: New test.

--- gcc/omp-simd-clone.c.jj     2016-11-18 20:04:31.000000000 +0100
+++ gcc/omp-simd-clone.c        2016-11-21 11:36:40.897643271 +0100
@@ -630,8 +630,9 @@ simd_clone_adjust_argument_types (struct
 
          if (node->definition)
            sc->args[i].simd_array
-             = create_tmp_simd_array (IDENTIFIER_POINTER (DECL_NAME (parm)),
-                                      parm_type, sc->simdlen);
+             = create_tmp_simd_array (DECL_NAME (parm)
+                                      ? IDENTIFIER_POINTER (DECL_NAME (parm))
+                                      : NULL, parm_type, sc->simdlen);
        }
       adjustments.safe_push (adj);
     }
--- gcc/testsuite/g++.dg/vect/simd-clone-7.cc.jj        2016-11-21 
11:49:12.810219423 +0100
+++ gcc/testsuite/g++.dg/vect/simd-clone-7.cc   2016-11-21 11:49:25.980054363 
+0100
@@ -0,0 +1,10 @@
+// PR middle-end/67335
+// { dg-do compile }
+// { dg-additional-options "-fopenmp-simd" }
+
+#pragma omp declare simd notinbranch uniform(y)
+float
+bar (float x, float *y, int)
+{
+  return y[0] + y[1] * x;
+}

        Jakub

Reply via email to