1/* Test for integer promotion rules: extended to long long by C99. */ 2/* Origin: Joseph Myers <jsm@polyomino.org.uk> */ 3/* { dg-do compile } */ 4/* { dg-options "-std=iso9899:1999 -pedantic-errors" } */ 5 6#include <limits.h> 7 8#define CHECK(T1, T2, TC) \ 9 do { \ 10 T1 a = 0; \ 11 T2 b = 0; \ 12 TC *c = 0; \ 13 __typeof__(a+b) *d = 0; \ 14 c = d; \ 15 d = c; \ 16 } while (0) 17 18void 19f (void) 20{ 21 /* Same type. */ 22 CHECK(int, int, int); 23 CHECK(unsigned int, unsigned int, unsigned int); 24 CHECK(long, long, long); 25 CHECK(unsigned long, unsigned long, unsigned long); 26 CHECK(long long, long long, long long); 27 CHECK(unsigned long long, unsigned long long, unsigned long long); 28 /* Both signed. */ 29 CHECK(int, long, long); 30 CHECK(int, long long, long long); 31 CHECK(long, int, long); 32 CHECK(long, long long, long long); 33 CHECK(long long, int, long long); 34 CHECK(long long, long, long long); 35 /* Both unsigned. */ 36 CHECK(unsigned int, unsigned long, unsigned long); 37 CHECK(unsigned int, unsigned long long, unsigned long long); 38 CHECK(unsigned long, unsigned int, unsigned long); 39 CHECK(unsigned long, unsigned long long, unsigned long long); 40 CHECK(unsigned long long, unsigned int, unsigned long long); 41 CHECK(unsigned long long, unsigned long, unsigned long long); 42 /* Unsigned of greater or equal rank. */ 43 CHECK(int, unsigned int, unsigned int); 44 CHECK(int, unsigned long, unsigned long); 45 CHECK(int, unsigned long long, unsigned long long); 46 CHECK(unsigned int, int, unsigned int); 47 CHECK(long, unsigned long, unsigned long); 48 CHECK(long, unsigned long long, unsigned long long); 49 CHECK(unsigned long, int, unsigned long); 50 CHECK(unsigned long, long, unsigned long); 51 CHECK(long long, unsigned long long, unsigned long long); 52 CHECK(unsigned long long, int, unsigned long long); 53 CHECK(unsigned long long, long, unsigned long long); 54 CHECK(unsigned long long, long long, unsigned long long); 55 /* Signed of greater rank. */ 56#if LONG_MAX >= UINT_MAX 57 CHECK(unsigned int, long, long); 58 CHECK(long, unsigned int, long); 59#else 60 CHECK(unsigned int, long, unsigned long); 61 CHECK(long, unsigned int, unsigned long); 62#endif 63#if LLONG_MAX >= UINT_MAX 64 CHECK(unsigned int, long long, long long); 65 CHECK(long long, unsigned int, long long); 66#else 67 CHECK(unsigned int, long long, unsigned long long); 68 CHECK(long long, unsigned int, unsigned long long); 69#endif 70#if LLONG_MAX >= ULONG_MAX 71 CHECK(unsigned long, long long, long long); 72 CHECK(long long, unsigned long, long long); 73#else 74 CHECK(unsigned long, long long, unsigned long long); 75 CHECK(long long, unsigned long, unsigned long long); 76#endif 77} 78