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