(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.c-torture/
execute/
pr69691.c
       1  /* PR rtl-optimization/69691 */
       2  
       3  char u[] = { 46, 97, 99, 104, 52, 0 };
       4  char *v[] = { u, 0 };
       5  struct S { char a[10]; struct S *b[31]; };
       6  struct S r[7], *r2 = r;
       7  static struct S *w = 0;
       8  
       9  __attribute__((noinline, noclone)) int
      10  fn (int x)
      11  {
      12    if (__builtin_strchr (u, x) || x == 96)
      13      return x;
      14    __builtin_abort ();
      15  }
      16  
      17  __attribute__((noinline, noclone)) int
      18  foo (char x)
      19  {
      20    if (x == 0)
      21      __builtin_abort ();
      22    if (fn (x) >= 96 && fn (x) <= 122)
      23      return (fn (x) - 96);
      24    else if (x == 46)
      25      return 0;
      26    else
      27      {
      28        __builtin_printf ("foo %d\n", x);
      29        return -1;
      30      }
      31  }
      32  
      33  __attribute__((noinline, noclone)) void
      34  bar (char **x)
      35  {
      36    char **b, c, *d, e[500], *f, g[10];
      37    int z, l, h, i;
      38    struct S *s;
      39  
      40    w = r2++;
      41    for (b = x; *b; b++)
      42      {
      43        __builtin_strcpy (e, *b);
      44        f = e;
      45        do
      46  	{
      47  	  d = __builtin_strchr (f, 32);
      48  	  if (d)
      49  	    *d = 0;
      50  	  l = __builtin_strlen (f);
      51  	  h = 0;
      52  	  s = w;
      53  	  __builtin_memset (g, 0, sizeof (g));
      54  	  for (z = 0; z < l; z++)
      55  	    {
      56  	      c = f[z];
      57  	      if (c >= 48 && c <= 57)
      58  		g[h] = c - 48;
      59  	      else
      60  		{
      61  		  i = foo (c);
      62  		  if (!s->b[i])
      63  		    {
      64  		      s->b[i] = r2++;
      65  		      if (r2 == &r[7])
      66  			__builtin_abort ();
      67  		    }
      68  		  s = s->b[i];
      69  		  h++;
      70  		}
      71  	    }
      72  	  __builtin_memcpy (s->a, g, 10);
      73  	  if (d)
      74  	    f = d + 1;
      75  	}
      76        while (d);
      77      }
      78  }
      79  
      80  __attribute__((noinline, noclone)) void
      81  baz (char *x)
      82  {
      83    char a[300], b[300];
      84    int z, y, t, l;
      85    struct S *s;
      86  
      87    l = __builtin_strlen (x);
      88    *a = 96;
      89    for (z = 0; z < l; z++)
      90      {
      91        a[z + 1] = fn ((unsigned int) x[z]);
      92        if (foo (a[z + 1]) <= 0)
      93  	return;
      94      }
      95    a[l + 1] = 96;
      96    l += 2;
      97    __builtin_memset (b, 0, l + 2);
      98  
      99    if (!w)
     100      return;
     101  
     102    for (z = 0; z < l; z++)
     103      {
     104        s = w;
     105        for (y = z; y < l; y++)
     106  	{
     107  	  s = s->b[foo (a[y])];
     108  	  if (!s)
     109  	    break;
     110  	  for (t = 0; t <= y - z + 2; t++)
     111  	    if (s->a[t] > b[z + t])
     112  	      b[z + t] = s->a[t];
     113  	}
     114      }
     115    for (z = 3; z < l - 2; z++)
     116      if ((b[z] & 1) == 1)
     117       asm ("");
     118  }
     119  
     120  int
     121  main ()
     122  {
     123    bar (v);
     124    char c[] = { 97, 97, 97, 97, 97, 0 };
     125    baz (c);
     126    return 0;
     127  }