1 /*
2 950704-1.c from the execute part of the gcc torture suite.
3 */
4
5 #include <testfwk.h>
6
7 #ifdef __SDCC
8 #pragma std_c99
9 #endif
10
11 // TODO: Enable when sdcc supports long long in these ports!
12 #if !defined(__SDCC_pic14) && !defined(__SDCC_pic16)
13 int errflag;
14
15 long long
f(long long x,long long y)16 f (long long x, long long y)
17 {
18 long long r;
19
20 errflag = 0;
21 r = x + y;
22 if (x >= 0)
23 {
24 if ((y < 0) || (r >= 0))
25 return r;
26 }
27 else
28 {
29 if ((y > 0) || (r < 0))
30 return r;
31 }
32 errflag = 1;
33 return 0;
34 }
35 #endif
36
37 void
testTortureExecute(void)38 testTortureExecute (void)
39 {
40 #if !defined(__SDCC_pdk14) // Lack of memory
41 f (0, 0);
42 if (errflag)
43 ASSERT (0);
44
45 f (1, -1);
46 if (errflag)
47 ASSERT (0);
48
49 f (-1, 1);
50 if (errflag)
51 ASSERT (0);
52
53 f (0x8000000000000000LL, 0x8000000000000000LL);
54 if (!errflag)
55 ASSERT (0);
56
57 f (0x8000000000000000LL, -1LL);
58 if (!errflag)
59 ASSERT (0);
60
61 f (0x7fffffffffffffffLL, 0x7fffffffffffffffLL);
62 if (!errflag)
63 ASSERT (0);
64
65 f (0x7fffffffffffffffLL, 1LL);
66 if (!errflag)
67 ASSERT (0);
68
69 f (0x7fffffffffffffffLL, 0x8000000000000000LL);
70 if (errflag)
71 ASSERT (0);
72
73 return;
74 #endif
75 }
76
77