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. */ func2(int a)22static int func2 (int a) { return i + a; } /* pure */ func3(int a)23static int func3 (int a) { return a * 3; } /* const */ func4(int a)24static int func4 (int a) { return func0(a) + a; } /* pure */ func5(int a)25static int func5 (int a) { return a + func1(a); } /* const */ func6(int a)26static int func6 (int a) { return func2(a) + a; } /* pure */ func7(int a)27static int func7 (int a) { return a + func3(a); } /* const */ 28 main()29int 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 func0(int a)76int func0 (int a) { return a - i; } /* pure */ func1(int a)77int func1 (int a) { return a - a; } /* const */ 78 79 int i = 2; 80 81 #ifndef __OPTIMIZE__ 82 /* Avoid link failures when not optimizing. */ link_error0()83void link_error0() {} link_error1()84void link_error1() {} link_error2()85void link_error2() {} link_error3()86void link_error3() {} link_error4()87void link_error4() {} link_error5()88void link_error5() {} link_error6()89void link_error6() {} link_error7()90void link_error7() {} 91 #endif /* ! __OPTIMIZE__ */ 92