(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
pr38245-3.c
       1  /* PR rtl-optimization/38245 */
       2  /* { dg-do run } */
       3  /* { dg-additional-sources "pr38245-4.c" } */
       4  /* { dg-options "-O2" } */
       5  
       6  #include "pr38245-3.h"
       7  
       8  extern void abort (void);
       9  
      10  struct A { int i, j; union { short s[4]; long long l; }; char pad[512]; } a;
      11  int globv = 6;
      12  
      13  void __attribute__((noinline))
      14  f1 (void)
      15  {
      16    a.s[2] = b1 (6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
      17  	       6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21);
      18    a.l = 6;
      19  }
      20  
      21  void __attribute__((noinline))
      22  f2 (void)
      23  {
      24    a.s[2] = b2 (6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
      25  	       6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21);
      26    a.l = 6;
      27  }
      28  
      29  void __attribute__((noinline))
      30  f3 (void)
      31  {
      32    struct B b = { 30, 31, { 32, 33 } };
      33    a.s[2] = b3 (6, 7, 8, 9, 10, 11, 12, b, 14, b, 16, b, 18, 19, 20, 21,
      34  	       6, b, 8, b, 10, 11, 12, 13, 14, b, 16, b, 18, 19, 20, 21);
      35    a.l = 6;
      36  }
      37  
      38  void __attribute__((noinline))
      39  f4 (void)
      40  {
      41    struct B b = { 30, 31, { 32, 33 } };
      42    a.s[2] = b4 (6, 7, 8, 9, 10, 11, 12, b, 14, b, 16, b, 18, 19, 20, 21,
      43  	       6, b, 8, b, 10, 11, 12, 13, 14, b, 16, b, 18, 19, 20, 21);
      44    a.l = 6;
      45  }
      46  
      47  void __attribute__((noinline))
      48  f5 (void)
      49  {
      50    a.s[2] = b5 (6.0, 7, 8, 9, 10, 11, 21.0, 22.0, 23.0);
      51    a.l = 6;
      52  }
      53  
      54  void __attribute__((noinline))
      55  f6 (void)
      56  {
      57    a.s[2] = b6 (6.0, 7, 8, 9, 10, 11, 21.0, 22.0, 23.0);
      58    a.l = 6;
      59  }
      60  
      61  void __attribute__((noinline))
      62  f7 (void)
      63  {
      64    a.s[2] = b7 (6, 7);
      65    a.l = 6;
      66  }
      67  
      68  void __attribute__((noinline))
      69  f8 (void)
      70  {
      71    a.s[2] = b8 (6, 7);
      72    a.l = 6;
      73  }
      74  
      75  void __attribute__((noinline))
      76  f9 (void)
      77  {
      78    a.s[2] = b9 (6, 7, 8, 9, 10, 11, 12);
      79    a.l = 6;
      80  }
      81  
      82  void __attribute__((noinline))
      83  f10 (void)
      84  {
      85    a.s[2] = b10 (6, 7, 8, 9, 10, 11, 12);
      86    a.l = 6;
      87  }
      88  
      89  int
      90  main (void)
      91  {
      92    char buf[256];
      93    int i;
      94    for (i = 0; i < (int) sizeof buf; i++)
      95      buf[i] = i;
      96    asm volatile ("" : : "r" (buf) : "memory");
      97    f1 ();
      98    f2 ();
      99    f3 ();
     100    f4 ();
     101    f5 ();
     102    f6 ();
     103    f7 ();
     104    f8 ();
     105    f9 ();
     106    f10 ();
     107    asm volatile ("" : : "r" (buf) : "memory");
     108    for (i = 0; i < (int) sizeof buf; i++)
     109      if (buf[i] != (char) i)
     110        abort ();
     111    return 0;
     112  }