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