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