1 /*
2    20050111-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 // Some ports do not yet support long long
12 #if !defined(__SDCC_pic14) && !defined(__SDCC_pic16)
13 
14 /* PR middle-end/19084, rtl-optimization/19348 */
15 
16 unsigned int
foo(unsigned long long x)17 foo (unsigned long long x)
18 {
19   unsigned int u;
20 
21   if (x == 0)
22     return 0;
23   u = (unsigned int) (x >> 32);
24   return u;
25 }
26 
27 unsigned long long
bar(unsigned short x)28 bar (unsigned short x)
29 {
30   return (unsigned long long) x << 32;
31 }
32 #endif
33 
34 void
testTortureExecute(void)35 testTortureExecute (void)
36 {
37 // Some ports do not yet support long long
38 #if !defined(__SDCC_pic14) && !defined(__SDCC_pic16)
39 
40   if (sizeof (long long) != 8)
41     return;
42 
43   if (foo (0) != 0)
44     ASSERT (0);
45 
46   if (foo (0xffffffffULL) != 0)
47     ASSERT (0);
48   if (foo (0x25ff00ff00ULL) != 0x25)
49     ASSERT (0);
50   if (bar (0) != 0)
51     ASSERT (0);
52   if (bar (0x25) != 0x2500000000ULL)
53     ASSERT (0);
54   return;
55 #endif
56 }
57