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