]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/SemaCXX/ast-print.cpp
Vendor import of clang trunk r178860:
[FreeBSD/FreeBSD.git] / test / SemaCXX / ast-print.cpp
1 // RUN: %clang_cc1 -ast-print %s | FileCheck %s
2
3 // CHECK: r;
4 // CHECK-NEXT: (r->method());
5 struct MyClass
6 {
7     void method() {}
8 };
9
10 struct Reference
11 {
12     MyClass* object;
13     MyClass* operator ->() { return object; }
14 };
15
16 void test1() {
17     Reference r;
18     (r->method());
19 }
20
21 // CHECK: if (int a = 1)
22 // CHECK:  while (int a = 1)
23 // CHECK:  switch (int a = 1)
24
25 void test2()
26 {
27     if (int a = 1) { }
28     while (int a = 1) { }
29     switch (int a = 1) { }
30 }
31
32 // CHECK: new (1) int;
33 void *operator new (typeof(sizeof(1)), int, int = 2);
34 void test3() {
35   new (1) int;
36 }
37
38 // CHECK: new X;
39 struct X {
40   void *operator new (typeof(sizeof(1)), int = 2);
41 };
42 void test4() { new X; }
43
44 // CHECK: for (int i = 2097, j = 42; false;)
45 void test5() {
46   for (int i = 2097, j = 42; false;) {}
47 }
48
49 // CHECK: test6fn((int &)y);
50 void test6fn(int& x);
51 void test6() {
52     unsigned int y = 0;
53     test6fn((int&)y);
54 }
55
56 // CHECK: S s( 1, 2 );
57
58 template <class S> void test7()
59 {
60     S s( 1,2 );
61 }
62
63
64 // CHECK: t.~T();
65
66 template <typename T> void test8(T t) { t.~T(); }
67
68
69 // CHECK:      enum E {
70 // CHECK-NEXT:  A,
71 // CHECK-NEXT:  B,
72 // CHECK-NEXT:  C
73 // CHECK-NEXT:  };
74 // CHECK-NEXT: {{^[ ]+}}E a = A;
75
76 struct test9
77 {
78     void f()
79     {
80         enum E { A, B, C };
81         E a = A;
82     }
83 };
84
85 namespace test10 {
86   namespace M {
87     template<typename T>
88     struct X {
89       enum { value };
90     };
91   }
92 }
93
94 typedef int INT;
95
96 // CHECK: test11
97 // CHECK-NEXT: return test10::M::X<INT>::value;
98 int test11() {
99   return test10::M::X<INT>::value;
100 }
101
102
103 struct DefaultArgClass
104 {
105   DefaultArgClass(int a = 1) {}
106 };
107
108 struct NoArgClass
109 {
110   NoArgClass() {}
111 };
112
113 struct VirualDestrClass
114 {
115   VirualDestrClass(int arg);
116   virtual ~VirualDestrClass();
117 };
118
119 struct ConstrWithCleanupsClass
120 {
121   ConstrWithCleanupsClass(const VirualDestrClass& cplx = VirualDestrClass(42));
122 };
123
124 // CHECK: test12
125 // CHECK-NEXT: DefaultArgClass useDefaultArg;
126 // CHECK-NEXT: DefaultArgClass overrideDefaultArg(1);
127 // CHECK-NEXT: NoArgClass noArg;
128 // CHECK-NEXT: ConstrWithCleanupsClass cwcNoArg;
129 // CHECK-NEXT: ConstrWithCleanupsClass cwcOverrideArg(48);
130 // CHECK-NEXT: ConstrWithCleanupsClass cwcExplicitArg(VirualDestrClass(56));
131 void test12() {
132   DefaultArgClass useDefaultArg;
133   DefaultArgClass overrideDefaultArg(1);
134   NoArgClass noArg;
135   ConstrWithCleanupsClass cwcNoArg;
136   ConstrWithCleanupsClass cwcOverrideArg(48);
137   ConstrWithCleanupsClass cwcExplicitArg(VirualDestrClass(56));
138 }
139