1*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -verify %s 2*67e74705SXin Li // expected-no-diagnostics 3*67e74705SXin Li 4*67e74705SXin Li // floating-point overloads 5*67e74705SXin Li 6*67e74705SXin Li __typeof__(0 + 0.0L) ld0; 7*67e74705SXin Li long double &ldr = ld0; 8*67e74705SXin Li 9*67e74705SXin Li __typeof__(0 + 0.0) d0; 10*67e74705SXin Li double &dr = d0; 11*67e74705SXin Li 12*67e74705SXin Li __typeof__(0 + 0.0f) f0; 13*67e74705SXin Li float &fr = f0; 14*67e74705SXin Li 15*67e74705SXin Li // integral promotions 16*67e74705SXin Li 17*67e74705SXin Li signed char c0; 18*67e74705SXin Li __typeof__(c0 + c0) c1; 19*67e74705SXin Li int &cr = c1; 20*67e74705SXin Li 21*67e74705SXin Li unsigned char uc0; 22*67e74705SXin Li __typeof__(uc0 + uc0) uc1; 23*67e74705SXin Li int &ucr = uc1; 24*67e74705SXin Li 25*67e74705SXin Li short s0; 26*67e74705SXin Li __typeof__(s0 + s0) s1; 27*67e74705SXin Li int &sr = s1; 28*67e74705SXin Li 29*67e74705SXin Li unsigned short us0; 30*67e74705SXin Li __typeof__(us0 + us0) us1; 31*67e74705SXin Li int &usr = us1; 32*67e74705SXin Li 33*67e74705SXin Li // integral overloads 34*67e74705SXin Li 35*67e74705SXin Li __typeof__(0 + 0UL) ul0; 36*67e74705SXin Li unsigned long &ulr = ul0; 37*67e74705SXin Li 38*67e74705SXin Li template<bool T> struct selector; 39*67e74705SXin Li template<> struct selector<true> { typedef long type; }; 40*67e74705SXin Li template<> struct selector<false> {typedef unsigned long type; }; 41*67e74705SXin Li __typeof__(0U + 0L) ui_l0; 42*67e74705SXin Li selector<(sizeof(long) > sizeof(unsigned int))>::type &ui_lr = ui_l0; 43*67e74705SXin Li 44*67e74705SXin Li __typeof__(0 + 0L) l0; 45*67e74705SXin Li long &lr = l0; 46*67e74705SXin Li 47*67e74705SXin Li __typeof__(0 + 0U) u0; 48*67e74705SXin Li unsigned &ur = u0; 49*67e74705SXin Li 50*67e74705SXin Li __typeof__(0 + 0) i0; 51*67e74705SXin Li int &ir = i0; 52