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     All dimensions are transposed : dim 0 -> dim 2
      15                                     dim 1 -> dim 0
      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 (i = 0; i < 3; i++)
      33      {
      34        for (j = 0; j < 4; j++)
      35  	{
      36  	  for (k = 0; k < 2; k++)
      37  	{
      38  	    printf ("[%d][%d][%d]=%d ", i, j, k, vel[k][i][j]);
      39  	}
      40  	  printf ("\n");
      41  	}
      42        printf ("\n");
      43      }
      44    for (i = 0; i < ARCHnodes; i++)
      45      for (j = 0; j < 3; j++)
      46        free (vel[i][j]);
      47  
      48    for (i = 0; i < ARCHnodes; 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    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  	      vel[i][j][k] = d;
      90  	      d++;
      91  	    }
      92  	}
      93      }
      94  }
      95  
      96  /*--------------------------------------------------------------------------*/