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

     1  /* PR middle-end/13400 */
     2  /* The following test used to fail at run-time with a write to read-only
     3     memory, caused by if-conversion converting a conditional write into an
     4     unconditional write.  */
     5  
     6  typedef struct {int c, l; char ch[3];} pstr;
     7  const pstr ao = {2, 2, "OK"};
     8  const pstr * const a = &ao;
     9  
    10  void test1(void)
    11  {
    12      if (a->ch[a->l]) {
    13          ((char *)a->ch)[a->l] = 0;
    14      }
    15  }
    16  
    17  void test2(void)
    18  {
    19      if (a->ch[a->l]) {
    20          ((char *)a->ch)[a->l] = -1;
    21      }
    22  }
    23  
    24  void test3(void)
    25  {
    26      if (a->ch[a->l]) {
    27          ((char *)a->ch)[a->l] = 1;
    28      }
    29  }
    30  
    31  int main(void)
    32  {
    33      test1();
    34      test2();
    35      test3();
    36      return 0;
    37  }
    38