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

     1  
     2  /* Origin: Kaveh Ghazi <ghazi@caip.rutgers.edu> 2002-05-27.  */
     3  
     4  /* Use a different function for each test so the link failures
     5     indicate which one is broken.  */
     6  extern void link_error0 (void);
     7  extern void link_error1 (void);
     8  extern void link_error2 (void);
     9  extern void link_error3 (void);
    10  extern void link_error4 (void);
    11  extern void link_error5 (void);
    12  extern void link_error6 (void);
    13  extern void link_error7 (void);
    14  
    15  extern int i;
    16  
    17  extern int func0 (int) __attribute__ ((__pure__));
    18  extern int func1 (int) __attribute__ ((__const__));
    19  
    20  /* GCC should automatically detect attributes for these functions.
    21     At -O3 They'll be inlined, but that's ok.  */
    22  static int func2 (int a) { return i + a; } /* pure */
    23  static int func3 (int a) { return a * 3; } /* const */
    24  static int func4 (int a) { return func0(a) + a; } /* pure */
    25  static int func5 (int a) { return a + func1(a); } /* const */
    26  static int func6 (int a) { return func2(a) + a; } /* pure */
    27  static int func7 (int a) { return a + func3(a); } /* const */
    28  
    29  int main ()
    30  {
    31    int i[10], r;
    32  
    33    i[0] = 0;
    34    r = func0(0);
    35    if (i[0])
    36      link_error0();
    37  
    38    i[1] = 0;
    39    r = func1(0);
    40    if (i[1])
    41      link_error1();
    42  
    43    i[2] = 0;
    44    r = func2(0);
    45    if (i[2])
    46      link_error2();
    47  
    48    i[3] = 0;
    49    r = func3(0);
    50    if (i[3])
    51      link_error3();
    52  
    53    i[4] = 0;
    54    r = func4(0);
    55    if (i[4])
    56      link_error4();
    57  
    58    i[5] = 0;
    59    r = func5(0);
    60    if (i[5])
    61      link_error5();
    62  
    63    i[6] = 0;
    64    r = func6(0);
    65    if (i[6])
    66      link_error6();
    67  
    68    i[7] = 0;
    69    r = func7(0);
    70    if (i[7])
    71      link_error7();
    72  
    73    return r;
    74  }
    75  
    76  int func0 (int a) { return a - i; } /* pure */
    77  int func1 (int a) { return a - a; } /* const */
    78  
    79  int i = 2;
    80  
    81  #ifndef __OPTIMIZE__
    82  /* Avoid link failures when not optimizing. */
    83  void link_error0() {}
    84  void link_error1() {}
    85  void link_error2() {}
    86  void link_error3() {}
    87  void link_error4() {}
    88  void link_error5() {}
    89  void link_error6() {}
    90  void link_error7() {}
    91  #endif /* ! __OPTIMIZE__ */