1  /* { dg-do run } */
       2  /* { dg-options "-fwhole-program" } */
       3  
       4  #include <stdio.h>
       5  #include <stdlib.h>
       6  #include <math.h>
       7  #include <string.h>
       8  
       9  void mem_init (void);
      10  int ARCHnodes, ARCHnodes1;
      11  int ***vel;
      12  
      13  /* The whole matrix VEL is flattened (3 dimensions).  
      14     The two inner dimensions are transposed.  
      15                                      dim 1 -> dim 2
      16                                      dim 2 -> dim 1
      17  */
      18  /*--------------------------------------------------------------------------*/
      19  
      20  int
      21  main (int argc, char **argv)
      22  {
      23    int i, j, k;
      24  
      25    ARCHnodes = 2;
      26    ARCHnodes1 = 4;
      27  
      28  /* Dynamic memory allocations and initializations */
      29  
      30    mem_init ();
      31  
      32    for (j = 0; j < 4; j++)
      33      {
      34        for (i = 0; i < 2; i++)
      35  	{
      36  	  for (k = 0; k < 3; k++)
      37  	{
      38  	    printf ("[%d][%d][%d]=%d ", i, j, k, vel[i][k][j]);
      39  	}
      40  	  printf ("\n");
      41  	}
      42        printf ("\n");
      43      }
      44    for (i = 0; i < 2; i++)
      45      for (j = 0; j < 3; j++)
      46        free (vel[i][j]);
      47  
      48    for (i = 0; i < 2; i++)
      49      free (vel[i]);
      50  
      51    free (vel);
      52    return 0;
      53  }
      54  
      55  /*--------------------------------------------------------------------------*/
      56  /* Dynamic memory allocations and initializations                           */
      57  
      58  void
      59  mem_init (void)
      60  {
      61  
      62    signed int i, j, k,d;
      63   
      64    d = 0;
      65    vel = (int ***) malloc (ARCHnodes * sizeof (int **));
      66  
      67    for (i = 0; i < ARCHnodes; i++)
      68      {
      69        vel[i] = (int **) malloc (3 * sizeof (int *));
      70        if (vel[i] == (int **) NULL)
      71  	{
      72  	  printf ("malloc failed for vel[%d]\n", i);
      73  	  exit (0);
      74  	}
      75      }
      76    for (i = 0; i < ARCHnodes; i++)
      77      {
      78        for (j = 0; j < 3; j++)
      79  	{
      80  	  vel[i][j] = (int *) malloc (ARCHnodes1 * sizeof (int));
      81  	}
      82      }
      83    for (i = 0; i < ARCHnodes; i++)
      84      {
      85        for (j = 0; j < 3; j++)
      86  	{
      87  	  for (k = 0; k < ARCHnodes1; k++)
      88  	    {
      89                printf ("acc to dim2 ");
      90  	      vel[i][j][k] = d;
      91  	      d++;
      92  	    }
      93  	}
      94      }
      95    printf ("\n");
      96  
      97  }
      98  
      99  /*--------------------------------------------------------------------------*/