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

     1  /* Test for alignment handling when a variable is accessed by nested
     2     function.  */
     3  /* Origin: Joey Ye <joey.ye@intel.com> */
     4  
     5  /* Force bigger stack alignment for PowerPC EABI targets.  */
     6  /* { dg-options "-mno-eabi" { target powerpc-*-eabi* } } */
     7  
     8  #include <stddef.h>
     9  
    10  typedef int aligned __attribute__((aligned));
    11  extern void abort (void);
    12  
    13  void
    14  check (int *i)
    15  {
    16    *i = 20;
    17    if ((((ptrdiff_t) i) & (__alignof__(aligned) - 1)) != 0)
    18      abort ();
    19  }
    20  
    21  void
    22  foo (void)
    23  {
    24    aligned jj;
    25    void bar ()
    26      {
    27        jj = -20;
    28      }
    29    jj = 0;
    30    bar ();
    31    if (jj != -20)
    32      abort ();
    33    check (&jj);
    34    if (jj != 20)
    35      abort ();
    36  }
    37  
    38  int
    39  main()
    40  {
    41    foo ();
    42    return 0;
    43  }