/* { dg-do run } */ /* { dg-options "-O2 -ftree-loop-distribute-patterns" } */ static void __attribute__((noipa, noinline)) foo (char **values, int ndim, char *needquotes, int *dims) { int i; int j = 0; int k = 0; char *retval = (char *)__builtin_malloc(1000); char *p = retval; char *tmp; int indx[111]; #define APPENDSTR(str) (__builtin_strcpy(p, (str)), p += __builtin_strlen(p)) #define APPENDCHAR(ch) (*p++ = (ch), *p = '\0') APPENDCHAR('{'); for (i = 0; i < ndim; i++) indx[i] = 0; do { for (i = j; i < ndim - 1; i++) APPENDCHAR('{'); APPENDSTR(values[k]); k++; for (i = ndim - 1; i >= 0; i--) { indx[i] = (indx[i] + 1) % dims[i]; if (indx[i]) { APPENDCHAR(','); break; } else APPENDCHAR('}'); } j = i; } while (j != -1); if (__builtin_strcmp (retval, "{{{0,1},{2,3}}}") != 0) __builtin_abort (); } int main() { char* array[4] = {"0", "1", "2", "3"}; char f[] = {0, 0, 0, 0, 0, 0, 0, 0}; int dims[] = {1, 2, 2}; foo (array, 3, f, dims); return 0; }