mirror of
https://github.com/nArnoSNES/tcc-65816.git
synced 2024-06-12 13:29:29 +00:00
92 lines
1.9 KiB
C
92 lines
1.9 KiB
C
|
|
/* Origin: Kaveh Ghazi <ghazi@caip.rutgers.edu> 2002-05-27. */
|
|
|
|
/* Use a different function for each test so the link failures
|
|
indicate which one is broken. */
|
|
extern void link_error0 (void);
|
|
extern void link_error1 (void);
|
|
extern void link_error2 (void);
|
|
extern void link_error3 (void);
|
|
extern void link_error4 (void);
|
|
extern void link_error5 (void);
|
|
extern void link_error6 (void);
|
|
extern void link_error7 (void);
|
|
|
|
extern int i;
|
|
|
|
extern int func0 (int) __attribute__ ((__pure__));
|
|
extern int func1 (int) __attribute__ ((__const__));
|
|
|
|
/* GCC should automatically detect attributes for these functions.
|
|
At -O3 They'll be inlined, but that's ok. */
|
|
static int func2 (int a) { return i + a; } /* pure */
|
|
static int func3 (int a) { return a * 3; } /* const */
|
|
static int func4 (int a) { return func0(a) + a; } /* pure */
|
|
static int func5 (int a) { return a + func1(a); } /* const */
|
|
static int func6 (int a) { return func2(a) + a; } /* pure */
|
|
static int func7 (int a) { return a + func3(a); } /* const */
|
|
|
|
int main ()
|
|
{
|
|
int i[10], r;
|
|
|
|
i[0] = 0;
|
|
r = func0(0);
|
|
if (i[0])
|
|
link_error0();
|
|
|
|
i[1] = 0;
|
|
r = func1(0);
|
|
if (i[1])
|
|
link_error1();
|
|
|
|
i[2] = 0;
|
|
r = func2(0);
|
|
if (i[2])
|
|
link_error2();
|
|
|
|
i[3] = 0;
|
|
r = func3(0);
|
|
if (i[3])
|
|
link_error3();
|
|
|
|
i[4] = 0;
|
|
r = func4(0);
|
|
if (i[4])
|
|
link_error4();
|
|
|
|
i[5] = 0;
|
|
r = func5(0);
|
|
if (i[5])
|
|
link_error5();
|
|
|
|
i[6] = 0;
|
|
r = func6(0);
|
|
if (i[6])
|
|
link_error6();
|
|
|
|
i[7] = 0;
|
|
r = func7(0);
|
|
if (i[7])
|
|
link_error7();
|
|
|
|
return r;
|
|
}
|
|
|
|
int func0 (int a) { return a - i; } /* pure */
|
|
int func1 (int a) { return a - a; } /* const */
|
|
|
|
int i = 2;
|
|
|
|
#ifndef __OPTIMIZE__
|
|
/* Avoid link failures when not optimizing. */
|
|
void link_error0() {}
|
|
void link_error1() {}
|
|
void link_error2() {}
|
|
void link_error3() {}
|
|
void link_error4() {}
|
|
void link_error5() {}
|
|
void link_error6() {}
|
|
void link_error7() {}
|
|
#endif /* ! __OPTIMIZE__ */
|