1  /* { dg-do run } */
       2  /* { dg-additional-options "-ftree-parallelize-loops=2" } */
       3  
       4  extern void abort (void);
       5  
       6  char *
       7  foo (int count, char **list)
       8  {
       9    char *minaddr = list[0];
      10    int i;
      11  
      12    for (i = 0; i < count; i++)
      13      {
      14        char *addr = list[i];
      15        if (addr < minaddr)
      16  	minaddr = addr;
      17      }
      18  
      19    return minaddr;
      20  }
      21  
      22  char *
      23  foo2 (int count, char **list)
      24  {
      25    char *maxaddr = list[0];
      26    int i;
      27  
      28    for (i = 0; i < count; i++)
      29      {
      30        char *addr = list[i];
      31        if (addr > maxaddr)
      32  	maxaddr = addr;
      33      }
      34  
      35    return maxaddr;
      36  }
      37  
      38  #define N 5
      39  
      40  static void
      41  init (char **list)
      42  {
      43    int i;
      44    for (i = 0; i < N; ++i)
      45      list[i] = (char *)&list[i];
      46  }
      47  
      48  int
      49  main (void)
      50  {
      51    char *list[N];
      52    char * res;
      53  
      54    init (list);
      55  
      56    res = foo (N, list);
      57  
      58    if (res != (char *)&list[0])
      59      abort ();
      60  
      61    res = foo2 (N, list);
      62  
      63    if (res != (char *)&list[N-1])
      64      abort ();
      65  
      66    return 0;
      67  }