Hi! We shouldn't copy the inbranch artificial argument. Also, if clone_info->inbranch, then inbranch_specified is necessarily true, thus (i & 1) will be always 0 and in that case we still need room for the extra argument.
Committed to trunk. 2014-02-04 Jakub Jelinek <ja...@redhat.com> PR other/58712 * omp-low.c (simd_clone_struct_copy): If from->inbranch is set, copy one less argument. (expand_simd_clones): Don't subtract clone_info->inbranch from simd_clone_struct_alloc argument. --- gcc/omp-low.c.jj 2014-01-29 12:43:24.000000000 +0100 +++ gcc/omp-low.c 2014-02-03 17:46:40.667922617 +0100 @@ -10660,7 +10660,8 @@ simd_clone_struct_copy (struct cgraph_si struct cgraph_simd_clone *from) { memcpy (to, from, (sizeof (struct cgraph_simd_clone) - + from->nargs * sizeof (struct cgraph_simd_clone_arg))); + + ((from->nargs - from->inbranch) + * sizeof (struct cgraph_simd_clone_arg)))); } /* Return vector of parameter types of function FNDECL. This uses @@ -11694,7 +11695,6 @@ expand_simd_clones (struct cgraph_node * if (i != 0) { clone = simd_clone_struct_alloc (clone_info->nargs - - clone_info->inbranch + ((i & 1) != 0)); simd_clone_struct_copy (clone, clone_info); /* Undo changes targetm.simd_clone.compute_vecsize_and_simdlen Jakub