1/* { dg-do run { target int128 } } */ 2/* { dg-options "-std=gnu99" { target c } } */ 3/* { dg-options "" { target c++ } } */ 4 5#include <stdarg.h> 6 7#ifndef __cplusplus 8extern void abort (void); 9#else 10extern "C" void abort (void); 11#endif 12 13#define MK_CONST128(A,B,C,D) \ 14 ( (((unsigned __int128) (unsigned int) A) << 96) \ 15 | (((unsigned __int128) (unsigned int) B) << 64) \ 16 | (((unsigned __int128) (unsigned int) C) << 32) \ 17 | ((unsigned __int128) (unsigned int) D) ) 18 19#define MK_CONST128_SIGNED(A,B,C,D) \ 20 ((__int128) MK_CONST128(A, B, C, D)) 21 22void foo(int i, ...) 23{ 24 __int128 q; 25 va_list va; 26 27 va_start(va, i); 28 q = va_arg(va, __int128); 29 va_end(va); 30 31 if (q != MK_CONST128_SIGNED (0xfeffffffU, 2U, 3U, 4U)) 32 abort(); 33} 34 35int main(void) 36{ 37 __int128 q = MK_CONST128_SIGNED (0xfeffffffU, 2U, 3U, 4U); 38 39 foo(1, q); 40 return 0; 41} 42