xref: /llvm-project/clang/test/ASTMerge/exprs-cpp/Inputs/exprs3.cpp (revision 0333dd95636da52229ca14b4e5525c1cd8ba62d2)
1*0333dd95SReid Kleckner // Integer literals
2*0333dd95SReid Kleckner const char Ch1 = 'a';
3*0333dd95SReid Kleckner const signed char Ch2 = 'b';
4*0333dd95SReid Kleckner const unsigned char Ch3 = 'c';
5*0333dd95SReid Kleckner 
6*0333dd95SReid Kleckner const wchar_t Ch4 = L'd';
7*0333dd95SReid Kleckner const signed wchar_t Ch5 = L'e';
8*0333dd95SReid Kleckner const unsigned wchar_t Ch6 = L'f';
9*0333dd95SReid Kleckner 
10*0333dd95SReid Kleckner const short C1 = 12;
11*0333dd95SReid Kleckner const unsigned short C2 = 13;
12*0333dd95SReid Kleckner 
13*0333dd95SReid Kleckner const int C3 = 12;
14*0333dd95SReid Kleckner const unsigned int C4 = 13;
15*0333dd95SReid Kleckner 
16*0333dd95SReid Kleckner const long C5 = 22;
17*0333dd95SReid Kleckner const unsigned long C6 = 23;
18*0333dd95SReid Kleckner 
19*0333dd95SReid Kleckner const long long C7 = 66;
20*0333dd95SReid Kleckner const unsigned long long C8 = 67;
21*0333dd95SReid Kleckner 
22*0333dd95SReid Kleckner 
23*0333dd95SReid Kleckner // String literals
24*0333dd95SReid Kleckner const char str1[] = "ABCD";
25*0333dd95SReid Kleckner const char str2[] = "ABCD" "0123";
26*0333dd95SReid Kleckner 
27*0333dd95SReid Kleckner const wchar_t wstr1[] = L"DEF";
28*0333dd95SReid Kleckner const wchar_t wstr2[] = L"DEF" L"123";
29*0333dd95SReid Kleckner 
30*0333dd95SReid Kleckner 
31*0333dd95SReid Kleckner // Boolean literals
32*0333dd95SReid Kleckner const bool bval1 = true;
33*0333dd95SReid Kleckner const bool bval2 = false;
34*0333dd95SReid Kleckner 
35*0333dd95SReid Kleckner // Floating Literals
36*0333dd95SReid Kleckner const float F1 = 12.2F;
37*0333dd95SReid Kleckner const double F2 = 1E4;
38*0333dd95SReid Kleckner const long double F3 = 1.2E-3L;
39*0333dd95SReid Kleckner 
40*0333dd95SReid Kleckner 
41*0333dd95SReid Kleckner // nullptr literal
42*0333dd95SReid Kleckner const void *vptr = nullptr;
43*0333dd95SReid Kleckner 
44*0333dd95SReid Kleckner 
45*0333dd95SReid Kleckner int glb_1[4] = { 10, 20, 30, 40 };
46*0333dd95SReid Kleckner 
47*0333dd95SReid Kleckner struct S1 {
48*0333dd95SReid Kleckner   int a;
49*0333dd95SReid Kleckner   int b[3];
50*0333dd95SReid Kleckner };
51*0333dd95SReid Kleckner 
52*0333dd95SReid Kleckner struct S2 {
53*0333dd95SReid Kleckner   int c;
54*0333dd95SReid Kleckner   S1 d;
55*0333dd95SReid Kleckner };
56*0333dd95SReid Kleckner 
57*0333dd95SReid Kleckner S2 glb_2 = { 22, .d.a = 44, .d.b[0] = 55, .d.b[1] = 66 };
58*0333dd95SReid Kleckner 
testNewThrowDelete()59*0333dd95SReid Kleckner void testNewThrowDelete() {
60*0333dd95SReid Kleckner   throw;
61*0333dd95SReid Kleckner   char *p = new char[10];
62*0333dd95SReid Kleckner   delete[] p;
63*0333dd95SReid Kleckner }
64*0333dd95SReid Kleckner 
testArrayElement(int * x,int n)65*0333dd95SReid Kleckner int testArrayElement(int *x, int n) {
66*0333dd95SReid Kleckner   return x[n];
67*0333dd95SReid Kleckner }
68*0333dd95SReid Kleckner 
testTernaryOp(int c,int x,int y)69*0333dd95SReid Kleckner int testTernaryOp(int c, int x, int y) {
70*0333dd95SReid Kleckner   return c ? x : y;
71*0333dd95SReid Kleckner }
72*0333dd95SReid Kleckner 
testConstCast(const S1 & x)73*0333dd95SReid Kleckner S1 &testConstCast(const S1 &x) {
74*0333dd95SReid Kleckner   return const_cast<S1&>(x);
75*0333dd95SReid Kleckner }
76*0333dd95SReid Kleckner 
testStaticCast(S1 & x)77*0333dd95SReid Kleckner S1 &testStaticCast(S1 &x) {
78*0333dd95SReid Kleckner   return static_cast<S1&>(x);
79*0333dd95SReid Kleckner }
80*0333dd95SReid Kleckner 
testReinterpretCast(S1 & x)81*0333dd95SReid Kleckner S1 &testReinterpretCast(S1 &x) {
82*0333dd95SReid Kleckner   return reinterpret_cast<S1&>(x);
83*0333dd95SReid Kleckner }
84*0333dd95SReid Kleckner 
testDynamicCast(S1 & x)85*0333dd95SReid Kleckner S1 &testDynamicCast(S1 &x) {
86*0333dd95SReid Kleckner   return dynamic_cast<S1&>(x);
87*0333dd95SReid Kleckner }
88*0333dd95SReid Kleckner 
testScalarInit(int x)89*0333dd95SReid Kleckner int testScalarInit(int x) {
90*0333dd95SReid Kleckner   return int(x);
91*0333dd95SReid Kleckner }
92*0333dd95SReid Kleckner 
93*0333dd95SReid Kleckner struct S {
94*0333dd95SReid Kleckner   float f;
95*0333dd95SReid Kleckner   double d;
96*0333dd95SReid Kleckner };
97*0333dd95SReid Kleckner struct T {
98*0333dd95SReid Kleckner   int i;
99*0333dd95SReid Kleckner   struct S s[10];
100*0333dd95SReid Kleckner };
101*0333dd95SReid Kleckner 
testOffsetOf()102*0333dd95SReid Kleckner void testOffsetOf() {
103*0333dd95SReid Kleckner   __builtin_offsetof(struct T, s[2].d);
104*0333dd95SReid Kleckner }
105*0333dd95SReid Kleckner 
106*0333dd95SReid Kleckner 
testDefaultArg(int a=2* 2)107*0333dd95SReid Kleckner int testDefaultArg(int a = 2*2) {
108*0333dd95SReid Kleckner   return a;
109*0333dd95SReid Kleckner }
110*0333dd95SReid Kleckner 
testDefaultArgExpr()111*0333dd95SReid Kleckner int testDefaultArgExpr() {
112*0333dd95SReid Kleckner   return testDefaultArg();
113*0333dd95SReid Kleckner }
114*0333dd95SReid Kleckner 
115*0333dd95SReid Kleckner template <typename T> // T has TemplateTypeParmType
116*0333dd95SReid Kleckner void testTemplateTypeParmType(int i);
117*0333dd95SReid Kleckner 
useTemplateType()118*0333dd95SReid Kleckner void useTemplateType() {
119*0333dd95SReid Kleckner   testTemplateTypeParmType<char>(4);
120*0333dd95SReid Kleckner }
121*0333dd95SReid Kleckner 
122*0333dd95SReid Kleckner const bool ExpressionTrait = __is_lvalue_expr(1);
123*0333dd95SReid Kleckner const unsigned ArrayRank = __array_rank(int[10][20]);
124*0333dd95SReid Kleckner const unsigned ArrayExtent = __array_extent(int[10][20], 1);
125*0333dd95SReid Kleckner 
testLambdaAdd(int toAdd)126*0333dd95SReid Kleckner constexpr int testLambdaAdd(int toAdd) {
127*0333dd95SReid Kleckner   const int Captured1 = 1, Captured2 = 2;
128*0333dd95SReid Kleckner   constexpr auto LambdaAdd = [Captured1, Captured2](int k) -> int {
129*0333dd95SReid Kleckner     return Captured1 + Captured2 + k;
130*0333dd95SReid Kleckner   };
131*0333dd95SReid Kleckner   return LambdaAdd(toAdd);
132*0333dd95SReid Kleckner }
133*0333dd95SReid Kleckner 
134*0333dd95SReid Kleckner template<typename T>
135*0333dd95SReid Kleckner struct TestLambdaTemplate {
136*0333dd95SReid Kleckner   T i, j;
TestLambdaTemplateTestLambdaTemplate137*0333dd95SReid Kleckner   TestLambdaTemplate(T i, const T &j) : i(i), j(j) {}
testLambdaTestLambdaTemplate138*0333dd95SReid Kleckner   T testLambda(T k) {
139*0333dd95SReid Kleckner     return [this](T k) -> decltype(auto) { return i + j + k; }(k);
140*0333dd95SReid Kleckner   }
141*0333dd95SReid Kleckner };
142