1 /* PR middle-end/24003 */ 2 /* Contributed by Eric Botcazou <ebotcazou@adacore.com> */ 3 4 /* { dg-do run } */ 5 /* { dg-options "-std=c99 -O -fno-inline" } */ 6 /* { dg-options "-std=c99 -O -fno-inline -mtune=i686" { target { { i?86-*-* x86_64-*-* } && ia32 } } } */ 7 8 #include <limits.h> 9 10 typedef unsigned long uns32_t; 11 typedef unsigned long long uns64_t; 12 13 extern void abort(void); 14 lo(uns64_t p)15uns32_t lo (uns64_t p) 16 { 17 return (uns32_t)p; 18 } 19 concat(uns32_t p1,uns32_t p2)20uns64_t concat (uns32_t p1, uns32_t p2) 21 { 22 #if LLONG_MAX > 2147483647L 23 return ((uns64_t)p1 << 32) | p2; 24 #else 25 return 0; 26 #endif 27 } 28 lshift32(uns64_t p1,uns32_t p2)29uns64_t lshift32 (uns64_t p1, uns32_t p2) 30 { 31 return concat (lo (p1), p2); 32 } 33 main(void)34int main(void) 35 { 36 #if LLONG_MAX > 2147483647L 37 if (lshift32 (0xFFFFFFFF12345678ULL, 0x90ABCDEFUL) != 0x1234567890ABCDEFULL) 38 abort (); 39 #endif 40 41 return 0; 42 } 43