modernc.org/ccgo/v3@v3.16.14/lib/testdata/gcc-9.1.0/gcc/testsuite/gcc.c-torture/execute/pr84478.c (about)

     1  /* PR tree-optimization/84478 */
     2  
     3  long poolptr;
     4  unsigned char *strpool;
     5  static const char *poolfilearr[] = {
     6    "mu",
     7    "",
     8  #define A "x",
     9  #define B A "xx", A A "xxx", A A A A A
    10  #define C B B B B B B B B B B
    11  #define D C C C C C C C C C C
    12    D C C C C C C C B B B
    13   ((void *)0) 
    14  };
    15  
    16  __attribute__((noipa)) long
    17  makestring (void)
    18  {
    19    return 1;
    20  }
    21  
    22  __attribute__((noipa)) long
    23  loadpoolstrings (long spare_size)
    24  {
    25    const char *s;
    26    long g = 0;
    27    int i = 0, j = 0;
    28    while ((s = poolfilearr[j++]))
    29      {
    30        int l = __builtin_strlen (s);
    31        i += l;
    32        if (i >= spare_size) return 0;
    33        while (l-- > 0) strpool[poolptr++] = *s++;
    34        g = makestring ();
    35      }
    36    return g;
    37  }
    38  
    39  int
    40  main ()
    41  {
    42    strpool = __builtin_malloc (4000);
    43    if (!strpool)
    44      return 0;
    45    asm volatile ("" : : : "memory");
    46    volatile int r = loadpoolstrings (4000);
    47    __builtin_free (strpool);
    48    return 0;
    49  }