1 // RUN: mkdir -p %T/used-helper-decls
2 // RUN: cp %S/Inputs/helper_decls_test*  %T/used-helper-decls/
3 // RUN: cd %T/used-helper-decls
4 
5 // ----------------------------------------------------------------------------
6 // Test moving used helper function and its transitively used functions.
7 // ----------------------------------------------------------------------------
8 // RUN: clang-move -names="a::Class1" -new_cc=%T/used-helper-decls/new_helper_decls_test.cpp -new_header=%T/used-helper-decls/new_helper_decls_test.h -old_cc=%T/used-helper-decls/helper_decls_test.cpp -old_header=../used-helper-decls/helper_decls_test.h %T/used-helper-decls/helper_decls_test.cpp -- -std=c++11
9 // RUN: FileCheck -input-file=%T/used-helper-decls/new_helper_decls_test.cpp -check-prefix=CHECK-NEW-CLASS1-CPP %s
10 // RUN: FileCheck -input-file=%T/used-helper-decls/helper_decls_test.cpp -check-prefix=CHECK-OLD-CLASS1-CPP %s
11 
12 // CHECK-NEW-CLASS1-CPP: #include "{{.*}}new_helper_decls_test.h"
13 // CHECK-NEW-CLASS1-CPP-SAME: {{[[:space:]]}}
14 // CHECK-NEW-CLASS1-CPP-NEXT: namespace {
15 // CHECK-NEW-CLASS1-CPP-NEXT: void HelperFun1() {}
16 // CHECK-NEW-CLASS1-CPP-SAME: {{[[:space:]]}}
17 // CHECK-NEW-CLASS1-CPP-NEXT: void HelperFun2() { HelperFun1(); }
18 // CHECK-NEW-CLASS1-CPP-NEXT: } // namespace
19 // CHECK-NEW-CLASS1-CPP-SAME: {{[[:space:]]}}
20 // CHECK-NEW-CLASS1-CPP-NEXT: namespace a {
21 // CHECK-NEW-CLASS1-CPP-NEXT: void Class1::f() { HelperFun2(); }
22 // CHECK-NEW-CLASS1-CPP-NEXT: } // namespace a
23 //
24 // CHECK-OLD-CLASS1-CPP: void HelperFun1() {}
25 // CHECK-OLD-CLASS1-CPP-NOT: void HelperFun2() { HelperFun1(); }
26 // CHECK-OLD-CLASS1-CPP-NOT: void Class1::f() { HelperFun2(); }
27 // CHECK-OLD-CLASS1-CPP: void Class2::f() {
28 // CHECK-OLD-CLASS1-CPP:   HelperFun1();
29 
30 
31 // ----------------------------------------------------------------------------
32 // Test moving used helper function and its transitively used static variables.
33 // ----------------------------------------------------------------------------
34 // RUN: cp %S/Inputs/helper_decls_test*  %T/used-helper-decls/
35 // RUN: clang-move -names="a::Class2" -new_cc=%T/used-helper-decls/new_helper_decls_test.cpp -new_header=%T/used-helper-decls/new_helper_decls_test.h -old_cc=%T/used-helper-decls/helper_decls_test.cpp -old_header=../used-helper-decls/helper_decls_test.h %T/used-helper-decls/helper_decls_test.cpp -- -std=c++11
36 // RUN: FileCheck -input-file=%T/used-helper-decls/new_helper_decls_test.cpp -check-prefix=CHECK-NEW-CLASS2-CPP %s
37 // RUN: FileCheck -input-file=%T/used-helper-decls/helper_decls_test.cpp -check-prefix=CHECK-OLD-CLASS2-CPP %s
38 
39 // CHECK-NEW-CLASS2-CPP: #include "{{.*}}new_helper_decls_test.h"
40 // CHECK-NEW-CLASS2-CPP-SAME: {{[[:space:]]}}
41 // CHECK-NEW-CLASS2-CPP-NEXT: namespace {
42 // CHECK-NEW-CLASS2-CPP-NEXT: void HelperFun1() {}
43 // CHECK-NEW-CLASS2-CPP-NEXT: } // namespace
44 // CHECK-NEW-CLASS2-CPP-SAME: {{[[:space:]]}}
45 // CHECK-NEW-CLASS2-CPP-NEXT: static const int K2 = 2;
46 // CHECK-NEW-CLASS2-CPP-SAME: {{[[:space:]]}}
47 // CHECK-NEW-CLASS2-CPP-NEXT: static void HelperFun3() { K2; }
48 // CHECK-NEW-CLASS2-CPP-NEXT: namespace a {
49 // CHECK-NEW-CLASS2-CPP-NEXT: void Class2::f() {
50 // CHECK-NEW-CLASS2-CPP-NEXT:   HelperFun1();
51 // CHECK-NEW-CLASS2-CPP-NEXT:   HelperFun3();
52 // CHECK-NEW-CLASS2-CPP-NEXT: }
53 // CHECK-NEW-CLASS2-CPP-NEXT: } // namespace a
54 
55 // CHECK-OLD-CLASS2-CPP: void HelperFun1() {}
56 // CHECK-OLD-CLASS2-CPP: void HelperFun2() { HelperFun1(); }
57 // CHECK-OLD-CLASS2-CPP: const int K1 = 1;
58 // CHECK-OLD-CLASS2-CPP: static const int K2 = 2;
59 // CHECK-OLD-CLASS2-CPP-NOT: static void HelperFun3() { K2; }
60 // CHECK-OLD-CLASS2-CPP-NOT: void Class2::f() {
61 // CHECK-OLD-CLASS2-CPP-NOT:   HelperFun1();
62 // CHECK-OLD-CLASS2-CPP-NOT:   HelperFun3();
63 // CHECK-OLD-CLASS2-CPP: void Class5::f() {
64 // CHECK-OLD-CLASS2-CPP-NEXT: int Result = K1 + K2 + K3;
65 
66 
67 // ----------------------------------------------------------------------------
68 // Test using a static member variable of a helper class.
69 // ----------------------------------------------------------------------------
70 // RUN: cp %S/Inputs/helper_decls_test*  %T/used-helper-decls/
71 // RUN: clang-move -names="a::Class3" -new_cc=%T/used-helper-decls/new_helper_decls_test.cpp -new_header=%T/used-helper-decls/new_helper_decls_test.h -old_cc=%T/used-helper-decls/helper_decls_test.cpp -old_header=../used-helper-decls/helper_decls_test.h %T/used-helper-decls/helper_decls_test.cpp -- -std=c++11
72 // RUN: FileCheck -input-file=%T/used-helper-decls/new_helper_decls_test.cpp -check-prefix=CHECK-NEW-CLASS3-CPP %s
73 // RUN: FileCheck -input-file=%T/used-helper-decls/helper_decls_test.cpp -check-prefix=CHECK-OLD-CLASS3-CPP %s
74 
75 // CHECK-NEW-CLASS3-CPP: #include "{{.*}}new_helper_decls_test.h"
76 // CHECK-NEW-CLASS3-CPP-SAME: {{[[:space:]]}}
77 // CHECK-NEW-CLASS3-CPP-NEXT: namespace {
78 // CHECK-NEW-CLASS3-CPP-NEXT: class HelperC1 {
79 // CHECK-NEW-CLASS3-CPP-NEXT: public:
80 // CHECK-NEW-CLASS3-CPP-NEXT:   static int I;
81 // CHECK-NEW-CLASS3-CPP-NEXT: };
82 // CHECK-NEW-CLASS3-CPP-SAME: {{[[:space:]]}}
83 // CHECK-NEW-CLASS3-CPP-NEXT: int HelperC1::I = 0;
84 // CHECK-NEW-CLASS3-CPP-NEXT: } // namespace
85 // CHECK-NEW-CLASS3-CPP-SAME: {{[[:space:]]}}
86 // CHECK-NEW-CLASS3-CPP-NEXT: namespace a {
87 // CHECK-NEW-CLASS3-CPP-NEXT: void Class3::f() { HelperC1::I; }
88 // CHECK-NEW-CLASS3-CPP-NEXT: } // namespace a
89 
90 // CHECK-OLD-CLASS3-CPP: namespace {
91 // CHECK-OLD-CLASS3-CPP-NOT: class HelperC1 {
92 // CHECK-OLD-CLASS3-CPP-NOT: public:
93 // CHECK-OLD-CLASS3-CPP-NOT:   static int I;
94 // CHECK-OLD-CLASS3-CPP-NOT: };
95 // CHECK-OLD-CLASS3-CPP-NOT: int HelperC1::I = 0;
96 // CHECK-OLD-CLASS3-CPP: class HelperC2 {};
97 
98 
99 // ----------------------------------------------------------------------------
100 // Test moving helper classes.
101 // ----------------------------------------------------------------------------
102 // RUN: cp %S/Inputs/helper_decls_test*  %T/used-helper-decls/
103 // RUN: clang-move -names="a::Class4" -new_cc=%T/used-helper-decls/new_helper_decls_test.cpp -new_header=%T/used-helper-decls/new_helper_decls_test.h -old_cc=%T/used-helper-decls/helper_decls_test.cpp -old_header=../used-helper-decls/helper_decls_test.h %T/used-helper-decls/helper_decls_test.cpp -- -std=c++11
104 // RUN: FileCheck -input-file=%T/used-helper-decls/new_helper_decls_test.cpp -check-prefix=CHECK-NEW-CLASS4-CPP %s
105 // RUN: FileCheck -input-file=%T/used-helper-decls/helper_decls_test.cpp -check-prefix=CHECK-OLD-CLASS4-CPP %s
106 
107 // CHECK-NEW-CLASS4-CPP: #include "{{.*}}new_helper_decls_test.h"
108 // CHECK-NEW-CLASS4-CPP-SAME: {{[[:space:]]}}
109 // CHECK-NEW-CLASS4-CPP-NEXT: namespace {
110 // CHECK-NEW-CLASS4-CPP-NEXT: class HelperC2 {};
111 // CHECK-NEW-CLASS4-CPP-NEXT: } // namespace
112 // CHECK-NEW-CLASS4-CPP-SAME: {{[[:space:]]}}
113 // CHECK-NEW-CLASS4-CPP-NEXT: namespace a {
114 // CHECK-NEW-CLASS4-CPP-NEXT: void Class4::f() { HelperC2 c2; }
115 // CHECK-NEW-CLASS4-CPP-NEXT: } // namespace a
116 
117 // CHECK-OLD-CLASS4-CPP-NOT: class HelperC2 {};
118 
119 
120 // ----------------------------------------------------------------------------
121 // Test moving helper variables and helper functions together.
122 // ----------------------------------------------------------------------------
123 // RUN: cp %S/Inputs/helper_decls_test*  %T/used-helper-decls/
124 // RUN: clang-move -names="a::Class5" -new_cc=%T/used-helper-decls/new_helper_decls_test.cpp -new_header=%T/used-helper-decls/new_helper_decls_test.h -old_cc=%T/used-helper-decls/helper_decls_test.cpp -old_header=../used-helper-decls/helper_decls_test.h %T/used-helper-decls/helper_decls_test.cpp -- -std=c++11
125 // RUN: FileCheck -input-file=%T/used-helper-decls/new_helper_decls_test.cpp -check-prefix=CHECK-NEW-CLASS5-CPP %s
126 // RUN: FileCheck -input-file=%T/used-helper-decls/helper_decls_test.cpp -check-prefix=CHECK-OLD-CLASS5-CPP %s
127 
128 // CHECK-NEW-CLASS5-CPP: #include "{{.*}}new_helper_decls_test.h"
129 // CHECK-NEW-CLASS5-CPP-SAME: {{[[:space:]]}}
130 // CHECK-NEW-CLASS5-CPP-NEXT: namespace {
131 // CHECK-NEW-CLASS5-CPP-NEXT: const int K1 = 1;
132 // CHECK-NEW-CLASS5-CPP-NEXT: } // namespace
133 // CHECK-NEW-CLASS5-CPP-SAME: {{[[:space:]]}}
134 // CHECK-NEW-CLASS5-CPP-NEXT: static const int K2 = 2;
135 // CHECK-NEW-CLASS5-CPP-NEXT: namespace a {
136 // CHECK-NEW-CLASS5-CPP-NEXT: static const int K3 = 3;
137 // CHECK-NEW-CLASS5-CPP-SAME: {{[[:space:]]}}
138 // CHECK-NEW-CLASS5-CPP-NEXT: static void HelperFun4() {}
139 // CHECK-NEW-CLASS5-CPP-SAME: {{[[:space:]]}}
140 // CHECK-NEW-CLASS5-CPP-NEXT: void Class5::f() {
141 // CHECK-NEW-CLASS5-CPP-NEXT:   int Result = K1 + K2 + K3;
142 // CHECK-NEW-CLASS5-CPP-NEXT:   HelperFun4();
143 // CHECK-NEW-CLASS5-CPP-NEXT: }
144 // CHECK-NEW-CLASS5-CPP-NEXT: } // namespace a
145 
146 // CHECK-OLD-CLASS5-CPP-NOT: const int K1 = 1;
147 // CHECK-OLD-CLASS5-CPP: static const int K2 = 2;
148 // CHECK-OLD-CLASS5-CPP: static void HelperFun3() { K2; }
149 // CHECK-OLD-CLASS5-CPP: static const int K4 = HelperC3::I;
150 // CHECK-OLD-CLASS5-CPP-NOT: void Class5::f() {
151 
152 
153 // ----------------------------------------------------------------------------
154 // Test moving helper variables and their transitively used helper classes.
155 // ----------------------------------------------------------------------------
156 // RUN: cp %S/Inputs/helper_decls_test*  %T/used-helper-decls/
157 // RUN: clang-move -names="a::Class6" -new_cc=%T/used-helper-decls/new_helper_decls_test.cpp -new_header=%T/used-helper-decls/new_helper_decls_test.h -old_cc=%T/used-helper-decls/helper_decls_test.cpp -old_header=../used-helper-decls/helper_decls_test.h %T/used-helper-decls/helper_decls_test.cpp -- -std=c++11
158 // RUN: FileCheck -input-file=%T/used-helper-decls/new_helper_decls_test.cpp -check-prefix=CHECK-NEW-CLASS6-CPP %s
159 // RUN: FileCheck -input-file=%T/used-helper-decls/helper_decls_test.cpp -check-prefix=CHECK-OLD-CLASS6-CPP %s
160 
161 // CHECK-NEW-CLASS6-CPP: #include "{{.*}}new_helper_decls_test.h"
162 // CHECK-NEW-CLASS6-CPP-SAME: {{[[:space:]]}}
163 // CHECK-NEW-CLASS6-CPP-NEXT: namespace {
164 // CHECK-NEW-CLASS6-CPP-NEXT: class HelperC3 {
165 // CHECK-NEW-CLASS6-CPP-NEXT: public:
166 // CHECK-NEW-CLASS6-CPP-NEXT:   static int I;
167 // CHECK-NEW-CLASS6-CPP-NEXT: };
168 // CHECK-NEW-CLASS6-CPP-SAME: {{[[:space:]]}}
169 // CHECK-NEW-CLASS6-CPP-NEXT: int HelperC3::I = 0;
170 // CHECK-NEW-CLASS6-CPP-NEXT: } // namespace
171 // CHECK-NEW-CLASS6-CPP-SAME: {{[[:space:]]}}
172 // CHECK-NEW-CLASS6-CPP-NEXT: namespace a {
173 // CHECK-NEW-CLASS6-CPP-NEXT: static const int K4 = HelperC3::I;
174 // CHECK-NEW-CLASS6-CPP-SAME: {{[[:space:]]}}
175 // CHECK-NEW-CLASS6-CPP-NEXT: int Class6::f() {
176 // CHECK-NEW-CLASS6-CPP-NEXT:   int R = K4;
177 // CHECK-NEW-CLASS6-CPP-NEXT:   return R;
178 // CHECK-NEW-CLASS6-CPP-NEXT: }
179 // CHECK-NEW-CLASS6-CPP-NEXT: } // namespace a
180 
181 // CHECK-OLD-CLASS6-CPP-NOT: class HelperC3 {
182 // CHECK-OLD-CLASS6-CPP-NOT: int HelperC3::I = 0;
183 // CHECK-OLD-CLASS6-CPP-NOT: static const int K4 = HelperC3::I;
184 
185 
186 // ----------------------------------------------------------------------------
187 // Test moving classes where its methods use helpers.
188 // ----------------------------------------------------------------------------
189 // RUN: cp %S/Inputs/helper_decls_test*  %T/used-helper-decls/
190 // RUN: clang-move -names="a::Class7" -new_cc=%T/used-helper-decls/new_helper_decls_test.cpp -new_header=%T/used-helper-decls/new_helper_decls_test.h -old_cc=%T/used-helper-decls/helper_decls_test.cpp -old_header=../used-helper-decls/helper_decls_test.h %T/used-helper-decls/helper_decls_test.cpp -- -std=c++11
191 // RUN: FileCheck -input-file=%T/used-helper-decls/new_helper_decls_test.cpp -check-prefix=CHECK-NEW-CLASS7-CPP %s
192 // RUN: FileCheck -input-file=%T/used-helper-decls/helper_decls_test.cpp -check-prefix=CHECK-OLD-CLASS7-CPP %s
193 
194 // CHECK-NEW-CLASS7-CPP: #include "{{.*}}new_helper_decls_test.h"
195 // CHECK-NEW-CLASS7-CPP-SAME: {{[[:space:]]}}
196 // CHECK-NEW-CLASS7-CPP-NEXT: namespace a {
197 // CHECK-NEW-CLASS7-CPP-NEXT: static const int K6 = 6;
198 // CHECK-NEW-CLASS7-CPP-SAME: {{[[:space:]]}}
199 // CHECK-NEW-CLASS7-CPP-NEXT: static void HelperFun6() {}
200 // CHECK-NEW-CLASS7-CPP-SAME: {{[[:space:]]}}
201 // CHECK-NEW-CLASS7-CPP-NEXT: int Class7::f() {
202 // CHECK-NEW-CLASS7-CPP-NEXT:   int R = K6;
203 // CHECK-NEW-CLASS7-CPP-NEXT:   return R;
204 // CHECK-NEW-CLASS7-CPP-NEXT: }
205 // CHECK-NEW-CLASS7-CPP-SAME: {{[[:space:]]}}
206 // CHECK-NEW-CLASS7-CPP-NEXT: int Class7::g() {
207 // CHECK-NEW-CLASS7-CPP-NEXT:   HelperFun6();
208 // CHECK-NEW-CLASS7-CPP-NEXT:   return 1;
209 // CHECK-NEW-CLASS7-CPP-NEXT: }
210 // CHECK-NEW-CLASS7-CPP-NEXT: } // namespace a
211 //
212 // CHECK-OLD-CLASS7-CPP-NOT: static const int K6 = 6;
213 // CHECK-OLD-CLASS7-CPP-NOT: static void HelperFun6() {}
214 // CHECK-OLD-CLASS7-CPP-NOT: int Class7::f() {
215 // CHECK-OLD-CLASS7-CPP-NOT: int Class7::g() {
216 
217 
218 // ----------------------------------------------------------------------------
219 // Test moving helper function and its transitively used helper variables.
220 // ----------------------------------------------------------------------------
221 // RUN: cp %S/Inputs/helper_decls_test*  %T/used-helper-decls/
222 // RUN: clang-move -names="a::Fun1" -new_cc=%T/used-helper-decls/new_helper_decls_test.cpp -new_header=%T/used-helper-decls/new_helper_decls_test.h -old_cc=%T/used-helper-decls/helper_decls_test.cpp -old_header=../used-helper-decls/helper_decls_test.h %T/used-helper-decls/helper_decls_test.cpp -- -std=c++11
223 // RUN: FileCheck -input-file=%T/used-helper-decls/new_helper_decls_test.cpp -check-prefix=CHECK-NEW-FUN1-CPP %s
224 // RUN: FileCheck -input-file=%T/used-helper-decls/helper_decls_test.cpp -check-prefix=CHECK-OLD-FUN1-CPP %s
225 
226 // CHECK-NEW-FUN1-CPP: #include "{{.*}}new_helper_decls_test.h"
227 // CHECK-NEW-FUN1-CPP-SAME: {{[[:space:]]}}
228 // CHECK-NEW-FUN1-CPP-NEXT: namespace a {
229 // CHECK-NEW-FUN1-CPP-NEXT: static const int K5 = 5;
230 // CHECK-NEW-FUN1-CPP-SAME: {{[[:space:]]}}
231 // CHECK-NEW-FUN1-CPP-NEXT: static int HelperFun5() {
232 // CHECK-NEW-FUN1-CPP-NEXT:   int R = K5;
233 // CHECK-NEW-FUN1-CPP-NEXT:   return R;
234 // CHECK-NEW-FUN1-CPP-NEXT: }
235 // CHECK-NEW-FUN1-CPP-SAME: {{[[:space:]]}}
236 // CHECK-NEW-FUN1-CPP-NEXT: void Fun1() { HelperFun5(); }
237 // CHECK-NEW-FUN1-CPP-NEXT: } // namespace a
238 
239 // CHECK-OLD-FUN1-CPP-NOT: static const int K5 = 5;
240 // CHECK-OLD-FUN1-CPP-NOT: static int HelperFun5() {
241 // CHECK-OLD-FUN1-CPP-NOT: void Fun1() { HelperFun5(); }
242 
243 
244 // ----------------------------------------------------------------------------
245 // Test no moving helpers when moving inline functions in header.
246 // ----------------------------------------------------------------------------
247 // RUN: cp %S/Inputs/helper_decls_test*  %T/used-helper-decls/
248 // RUN: clang-move -names="a::Fun2" -new_cc=%T/used-helper-decls/new_helper_decls_test.cpp -new_header=%T/used-helper-decls/new_helper_decls_test.h -old_cc=%T/used-helper-decls/helper_decls_test.cpp -old_header=../used-helper-decls/helper_decls_test.h %T/used-helper-decls/helper_decls_test.cpp -- -std=c++11
249 // RUN: FileCheck -input-file=%T/used-helper-decls/new_helper_decls_test.cpp -check-prefix=CHECK-NEW-FUN2-CPP %s
250 // RUN: FileCheck -input-file=%T/used-helper-decls/new_helper_decls_test.h -check-prefix=CHECK-NEW-FUN2-H %s
251 // RUN: FileCheck -input-file=%T/used-helper-decls/helper_decls_test.h -check-prefix=CHECK-OLD-FUN2-H %s
252 
253 // CHECK-NEW-FUN2-H: namespace a {
254 // CHECK-NEW-FUN2-H-NEXT: inline void Fun2() {}
255 // CHECK-NEW-FUN2-H-NEXT: } // namespace a
256 
257 // CHECK-NEW-FUN2-CPP: #include "{{.*}}new_helper_decls_test.h"
258 // CHECK-NEW-FUN2-CPP-SAME: {{[[:space:]]}}
259 
260 // CHECK-OLD-FUN2-H-NOT: inline void Fun2() {}
261 
262 // ----------------------------------------------------------------------------
263 // Test moving used helper function and its transitively used functions.
264 // ----------------------------------------------------------------------------
265 // RUN: cp %S/Inputs/helper_decls_test*  %T/used-helper-decls/
266 // RUN: clang-move -names="b::Fun3" -new_cc=%T/used-helper-decls/new_helper_decls_test.cpp -new_header=%T/used-helper-decls/new_helper_decls_test.h -old_cc=%T/used-helper-decls/helper_decls_test.cpp -old_header=../used-helper-decls/helper_decls_test.h %T/used-helper-decls/helper_decls_test.cpp -- -std=c++11
267 // RUN: FileCheck -input-file=%T/used-helper-decls/new_helper_decls_test.cpp -check-prefix=CHECK-NEW-FUN3-CPP %s
268 // RUN: FileCheck -input-file=%T/used-helper-decls/helper_decls_test.cpp -check-prefix=CHECK-OLD-FUN3-CPP %s
269 
270 // CHECK-NEW-FUN3-CPP: #include "{{.*}}new_helper_decls_test.h"
271 // CHECK-NEW-FUN3-CPP-SAME: {{[[:space:]]}}
272 // CHECK-NEW-FUN3-CPP-NEXT: namespace b {
273 // CHECK-NEW-FUN3-CPP-NEXT: namespace {
274 // CHECK-NEW-FUN3-CPP-NEXT: void HelperFun7();
275 // CHECK-NEW-FUN3-CPP-SAME: {{[[:space:]]}}
276 // CHECK-NEW-FUN3-CPP-NEXT: class HelperC4;
277 // CHECK-NEW-FUN3-CPP-NEXT: } // namespace
278 // CHECK-NEW-FUN3-CPP-SAME: {{[[:space:]]}}
279 // CHECK-NEW-FUN3-CPP-NEXT: void Fun3() {
280 // CHECK-NEW-FUN3-CPP-NEXT:   HelperFun7();
281 // CHECK-NEW-FUN3-CPP-NEXT:   HelperC4 *t;
282 // CHECK-NEW-FUN3-CPP-NEXT: }
283 // CHECK-NEW-FUN3-CPP-NEXT: namespace {
284 // CHECK-NEW-FUN3-CPP-NEXT: void HelperFun7() {}
285 // CHECK-NEW-FUN3-CPP-SAME: {{[[:space:]]}}
286 // CHECK-NEW-FUN3-CPP-NEXT: class HelperC4 {};
287 // CHECK-NEW-FUN3-CPP-NEXT: } // namespace
288 // CHECK-NEW-FUN3-CPP-NEXT: } // namespace b
289 //
290 // CHECK-OLD-FUN3-CPP-NOT: void HelperFun7();
291 // CHECK-OLD-FUN3-CPP-NOT: void HelperFun7() {}
292 // CHECK-OLD-FUN3-CPP-NOT: void Fun3() { HelperFun7(); }
293 
294 // ----------------------------------------------------------------------------
295 // Test moving all symbols in headers.
296 // ----------------------------------------------------------------------------
297 // RUN: cp %S/Inputs/helper_decls_test*  %T/used-helper-decls/
298 // RUN: clang-move -names="a::Class1, a::Class2, a::Class3, a::Class4, a::Class5, a::Class5, a::Class6, a::Class7, a::Fun1, a::Fun2, b::Fun3" -new_cc=%T/used-helper-decls/new_helper_decls_test.cpp -new_header=%T/used-helper-decls/new_helper_decls_test.h -old_cc=%T/used-helper-decls/helper_decls_test.cpp -old_header=../used-helper-decls/helper_decls_test.h %T/used-helper-decls/helper_decls_test.cpp -- -std=c++11
299 // RUN: FileCheck -input-file=%T/used-helper-decls/new_helper_decls_test.h -check-prefix=CHECK-NEW-H %s
300 // RUN: FileCheck -input-file=%T/used-helper-decls/new_helper_decls_test.cpp -check-prefix=CHECK-NEW-CPP %s
301 // RUN: FileCheck -input-file=%T/used-helper-decls/helper_decls_test.h -allow-empty -check-prefix=CHECK-EMPTY %s
302 // RUN: FileCheck -input-file=%T/used-helper-decls/helper_decls_test.cpp -allow-empty -check-prefix=CHECK-EMPTY %s
303 
304 
305 // CHECK-NEW-H: namespace a {
306 // CHECK-NEW-H-NEXT: class Class1 {
307 // CHECK-NEW-H-NEXT:   void f();
308 // CHECK-NEW-H-NEXT: };
309 // CHECK-NEW-H-SAME: {{[[:space:]]}}
310 // CHECK-NEW-H-NEXT: class Class2 {
311 // CHECK-NEW-H-NEXT:   void f();
312 // CHECK-NEW-H-NEXT: };
313 // CHECK-NEW-H-SAME: {{[[:space:]]}}
314 // CHECK-NEW-H-NEXT: class Class3 {
315 // CHECK-NEW-H-NEXT:   void f();
316 // CHECK-NEW-H-NEXT: };
317 // CHECK-NEW-H-SAME: {{[[:space:]]}}
318 // CHECK-NEW-H-NEXT: class Class4 {
319 // CHECK-NEW-H-NEXT:   void f();
320 // CHECK-NEW-H-NEXT: };
321 // CHECK-NEW-H-SAME: {{[[:space:]]}}
322 // CHECK-NEW-H-NEXT: class Class5 {
323 // CHECK-NEW-H-NEXT:   void f();
324 // CHECK-NEW-H-NEXT: };
325 // CHECK-NEW-H-SAME: {{[[:space:]]}}
326 // CHECK-NEW-H-NEXT: class Class6 {
327 // CHECK-NEW-H-NEXT:   int f();
328 // CHECK-NEW-H-NEXT: };
329 // CHECK-NEW-H-SAME: {{[[:space:]]}}
330 // CHECK-NEW-H-NEXT: class Class7 {
331 // CHECK-NEW-H-NEXT:   int f();
332 // CHECK-NEW-H-NEXT:   int g();
333 // CHECK-NEW-H-NEXT: };
334 // CHECK-NEW-H-SAME: {{[[:space:]]}}
335 // CHECK-NEW-H-NEXT: void Fun1();
336 // CHECK-NEW-H-SAME: {{[[:space:]]}}
337 // CHECK-NEW-H-NEXT: inline void Fun2() {}
338 // CHECK-NEW-H-SAME: {{[[:space:]]}}
339 // CHECK-NEW-H-NEXT: } // namespace a
340 
341 
342 // CHECK-NEW-CPP: namespace {
343 // CHECK-NEW-CPP-NEXT: class HelperC1 {
344 // CHECK-NEW-CPP-NEXT: public:
345 // CHECK-NEW-CPP-NEXT:   static int I;
346 // CHECK-NEW-CPP-NEXT: };
347 // CHECK-NEW-CPP-SAME: {{[[:space:]]}}
348 // CHECK-NEW-CPP-NEXT: int HelperC1::I = 0;
349 // CHECK-NEW-CPP-SAME: {{[[:space:]]}}
350 // CHECK-NEW-CPP-NEXT: class HelperC2 {};
351 // CHECK-NEW-CPP-SAME: {{[[:space:]]}}
352 // CHECK-NEW-CPP-NEXT: class HelperC3 {
353 // CHECK-NEW-CPP-NEXT:  public:
354 // CHECK-NEW-CPP-NEXT:   static int I;
355 // CHECK-NEW-CPP-NEXT: };
356 // CHECK-NEW-CPP-SAME: {{[[:space:]]}}
357 // CHECK-NEW-CPP-NEXT: int HelperC3::I = 0;
358 // CHECK-NEW-CPP-SAME: {{[[:space:]]}}
359 // CHECK-NEW-CPP-NEXT: void HelperFun1() {}
360 // CHECK-NEW-CPP-SAME: {{[[:space:]]}}
361 // CHECK-NEW-CPP-NEXT: void HelperFun2() { HelperFun1(); }
362 // CHECK-NEW-CPP-SAME: {{[[:space:]]}}
363 // CHECK-NEW-CPP-NEXT: const int K1 = 1;
364 // CHECK-NEW-CPP-NEXT: } // namespace
365 // CHECK-NEW-CPP-SAME: {{[[:space:]]}}
366 // CHECK-NEW-CPP-NEXT: static const int K2 = 2;
367 // CHECK-NEW-CPP-NEXT: static void HelperFun3() { K2; }
368 // CHECK-NEW-CPP-SAME: {{[[:space:]]}}
369 // CHECK-NEW-CPP-NEXT: namespace a {
370 // CHECK-NEW-CPP-SAME: {{[[:space:]]}}
371 // CHECK-NEW-CPP-NEXT: static const int K3 = 3;
372 // CHECK-NEW-CPP-NEXT: static const int K4 = HelperC3::I;
373 // CHECK-NEW-CPP-NEXT: static const int K5 = 5;
374 // CHECK-NEW-CPP-NEXT: static const int K6 = 6;
375 // CHECK-NEW-CPP-SAME: {{[[:space:]]}}
376 // CHECK-NEW-CPP-NEXT: static void HelperFun4() {}
377 // CHECK-NEW-CPP-NEXT: static void HelperFun6() {}
378 // CHECK-NEW-CPP-SAME: {{[[:space:]]}}
379 // CHECK-NEW-CPP-NEXT: void Class1::f() { HelperFun2(); }
380 // CHECK-NEW-CPP-SAME: {{[[:space:]]}}
381 // CHECK-NEW-CPP-NEXT: void Class2::f() {
382 // CHECK-NEW-CPP-NEXT:   HelperFun1();
383 // CHECK-NEW-CPP-NEXT:   HelperFun3();
384 // CHECK-NEW-CPP-NEXT: }
385 // CHECK-NEW-CPP-SAME: {{[[:space:]]}}
386 // CHECK-NEW-CPP-NEXT: void Class3::f() { HelperC1::I; }
387 // CHECK-NEW-CPP-SAME: {{[[:space:]]}}
388 // CHECK-NEW-CPP-NEXT: void Class4::f() { HelperC2 c2; }
389 // CHECK-NEW-CPP-SAME: {{[[:space:]]}}
390 // CHECK-NEW-CPP-NEXT: void Class5::f() {
391 // CHECK-NEW-CPP-NEXT:   int Result = K1 + K2 + K3;
392 // CHECK-NEW-CPP-NEXT:   HelperFun4();
393 // CHECK-NEW-CPP-NEXT: }
394 // CHECK-NEW-CPP-SAME: {{[[:space:]]}}
395 // CHECK-NEW-CPP-NEXT: int Class6::f() {
396 // CHECK-NEW-CPP-NEXT:   int R = K4;
397 // CHECK-NEW-CPP-NEXT:   return R;
398 // CHECK-NEW-CPP-NEXT: }
399 // CHECK-NEW-CPP-SAME: {{[[:space:]]}}
400 // CHECK-NEW-CPP-NEXT: int Class7::f() {
401 // CHECK-NEW-CPP-NEXT:   int R = K6;
402 // CHECK-NEW-CPP-NEXT:   return R;
403 // CHECK-NEW-CPP-NEXT: }
404 // CHECK-NEW-CPP-SAME: {{[[:space:]]}}
405 // CHECK-NEW-CPP-NEXT: int Class7::g() {
406 // CHECK-NEW-CPP-NEXT:   HelperFun6();
407 // CHECK-NEW-CPP-NEXT:   return 1;
408 // CHECK-NEW-CPP-NEXT: }
409 // CHECK-NEW-CPP-SAME: {{[[:space:]]}}
410 // CHECK-NEW-CPP-NEXT: static int HelperFun5() {
411 // CHECK-NEW-CPP-NEXT:   int R = K5;
412 // CHECK-NEW-CPP-NEXT:   return R;
413 // CHECK-NEW-CPP-NEXT: }
414 // CHECK-NEW-CPP-SAME: {{[[:space:]]}}
415 // CHECK-NEW-CPP-NEXT: void Fun1() { HelperFun5(); }
416 // CHECK-NEW-CPP-SAME: {{[[:space:]]}}
417 // CHECK-NEW-CPP-NEXT: } // namespace a
418 // CHECK-NEW-CPP-SAME: {{[[:space:]]}}
419 // CHECK-NEW-CPP-NEXT: namespace b {
420 // CHECK-NEW-CPP-NEXT: namespace {
421 // CHECK-NEW-CPP-NEXT: void HelperFun7();
422 // CHECK-NEW-CPP-SAME: {{[[:space:]]}}
423 // CHECK-NEW-CPP-NEXT: class HelperC4;
424 // CHECK-NEW-CPP-NEXT: } // namespace
425 // CHECK-NEW-CPP-SAME: {{[[:space:]]}}
426 // CHECK-NEW-CPP-NEXT: void Fun3() {
427 // CHECK-NEW-CPP-NEXT:   HelperFun7();
428 // CHECK-NEW-CPP-NEXT:   HelperC4 *t;
429 // CHECK-NEW-CPP-NEXT: }
430 // CHECK-NEW-CPP-SAME: {{[[:space:]]}}
431 // CHECK-NEW-CPP-NEXT: namespace {
432 // CHECK-NEW-CPP-NEXT: void HelperFun7() {}
433 // CHECK-NEW-CPP-SAME: {{[[:space:]]}}
434 // CHECK-NEW-CPP-NEXT: class HelperC4 {};
435 // CHECK-NEW-CPP-NEXT: } // namespace
436 // CHECK-NEW-CPP-NEXT: } // namespace b
437 
438 // CHECK-EMPTY: {{^}}{{$}}
439