(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
torture/
stackalign/
nested-3.c
       1  /* { dg-do run } */
       2  /* { dg-skip-if "Stack alignment is too small" { hppa*-*-hpux* } } */
       3  /* { dg-require-effective-target alloca } */
       4  
       5  #include "check.h"
       6  
       7  #ifndef ALIGNMENT
       8  #define ALIGNMENT	64
       9  #endif
      10  
      11  typedef int aligned __attribute__((aligned(ALIGNMENT)));
      12  extern int strncmp (const char *, const char *, size_t);
      13  
      14  int global;
      15  
      16  void
      17  copy (char *p, int size)
      18  {
      19    __builtin_strncpy (p, "good", size);
      20  }
      21  
      22  void
      23  foo (int size)
      24  {
      25    aligned j;
      26  
      27     __attribute__ ((__noinline__))
      28    void bar (int size)
      29      {
      30        char *p = __builtin_alloca (size + 1);
      31        aligned i;
      32  
      33        copy (p, size);
      34        if (strncmp (p, "good", size) != 0)
      35  	{
      36  #ifdef DEBUG
      37  	  p[size] = '\0';
      38  	  printf ("Failed: %s != good\n", p);
      39  #endif
      40  	  abort ();
      41  	}
      42  
      43        if (check_int (&i,  __alignof__(i)) != i)
      44  	abort ();
      45  
      46        if (check_int (&j,  __alignof__(j)) != j)
      47  	abort ();
      48  
      49        j = -20;
      50      }
      51    bar (size);
      52  
      53    if (j != -20)
      54      abort ();
      55  
      56    if (check_int (&j,  __alignof__(j)) != j)
      57      abort ();
      58  }
      59  
      60  int
      61  main()
      62  {
      63    foo (5);
      64    return 0;
      65  }