xref: /aosp_15_r20/external/clang/test/CXX/expr/p9.cpp (revision 67e74705e28f6214e480b399dd47ea732279e315)
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