1/* Test for integer promotion rules: C90 subset of types. */ 2/* Origin: Joseph Myers <jsm@polyomino.org.uk> */ 3/* { dg-do compile } */ 4/* { dg-options "-std=iso9899:1990 -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 /* One type is unsigned long. */ 22 CHECK(unsigned long, unsigned long, unsigned long); 23 CHECK(unsigned int, unsigned long, unsigned long); 24 CHECK(unsigned long, unsigned int, unsigned long); 25 CHECK(int, unsigned long, unsigned long); 26 CHECK(long, unsigned long, unsigned long); 27 CHECK(unsigned long, int, unsigned long); 28 CHECK(unsigned long, long, unsigned long); 29 /* long and unsigned int. */ 30#if LONG_MAX >= UINT_MAX 31 CHECK(unsigned int, long, long); 32 CHECK(long, unsigned int, long); 33#else 34 CHECK(unsigned int, long, unsigned long); 35 CHECK(long, unsigned int, unsigned long); 36#endif 37 /* One type is long. */ 38 CHECK(long, long, long); 39 CHECK(int, long, long); 40 CHECK(long, int, long); 41 /* One type is unsigned int. */ 42 CHECK(unsigned int, unsigned int, unsigned int); 43 CHECK(int, unsigned int, unsigned int); 44 CHECK(unsigned int, int, unsigned int); 45 /* Otherwise int. */ 46 CHECK(int, int, int); 47} 48