xref: /llvm-project/clang-tools-extra/test/clang-move/move-used-helper-decls.cpp (revision dd5571d51a0f6164cb66d02c8cd0e7032e42abe4)
13626516bSHaojian Wu // RUN: mkdir -p %T/used-helper-decls
23626516bSHaojian Wu // RUN: cp %S/Inputs/helper_decls_test*  %T/used-helper-decls/
33626516bSHaojian Wu // RUN: cd %T/used-helper-decls
43626516bSHaojian Wu 
53626516bSHaojian Wu // ----------------------------------------------------------------------------
6*dd5571d5SKazuaki Ishizaki // Test moving used helper function and its transitively used functions.
73626516bSHaojian Wu // ----------------------------------------------------------------------------
83626516bSHaojian Wu // 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
93626516bSHaojian Wu // RUN: FileCheck -input-file=%T/used-helper-decls/new_helper_decls_test.cpp -check-prefix=CHECK-NEW-CLASS1-CPP %s
103626516bSHaojian Wu // RUN: FileCheck -input-file=%T/used-helper-decls/helper_decls_test.cpp -check-prefix=CHECK-OLD-CLASS1-CPP %s
113626516bSHaojian Wu 
123626516bSHaojian Wu // CHECK-NEW-CLASS1-CPP: #include "{{.*}}new_helper_decls_test.h"
133626516bSHaojian Wu // CHECK-NEW-CLASS1-CPP-SAME: {{[[:space:]]}}
143626516bSHaojian Wu // CHECK-NEW-CLASS1-CPP-NEXT: namespace {
153626516bSHaojian Wu // CHECK-NEW-CLASS1-CPP-NEXT: void HelperFun1() {}
163626516bSHaojian Wu // CHECK-NEW-CLASS1-CPP-SAME: {{[[:space:]]}}
173626516bSHaojian Wu // CHECK-NEW-CLASS1-CPP-NEXT: void HelperFun2() { HelperFun1(); }
183626516bSHaojian Wu // CHECK-NEW-CLASS1-CPP-NEXT: } // namespace
193626516bSHaojian Wu // CHECK-NEW-CLASS1-CPP-SAME: {{[[:space:]]}}
203626516bSHaojian Wu // CHECK-NEW-CLASS1-CPP-NEXT: namespace a {
213626516bSHaojian Wu // CHECK-NEW-CLASS1-CPP-NEXT: void Class1::f() { HelperFun2(); }
223626516bSHaojian Wu // CHECK-NEW-CLASS1-CPP-NEXT: } // namespace a
233626516bSHaojian Wu //
243626516bSHaojian Wu // CHECK-OLD-CLASS1-CPP: void HelperFun1() {}
253626516bSHaojian Wu // CHECK-OLD-CLASS1-CPP-NOT: void HelperFun2() { HelperFun1(); }
263626516bSHaojian Wu // CHECK-OLD-CLASS1-CPP-NOT: void Class1::f() { HelperFun2(); }
273626516bSHaojian Wu // CHECK-OLD-CLASS1-CPP: void Class2::f() {
283626516bSHaojian Wu // CHECK-OLD-CLASS1-CPP:   HelperFun1();
293626516bSHaojian Wu 
303626516bSHaojian Wu 
313626516bSHaojian Wu // ----------------------------------------------------------------------------
32*dd5571d5SKazuaki Ishizaki // Test moving used helper function and its transitively used static variables.
333626516bSHaojian Wu // ----------------------------------------------------------------------------
343626516bSHaojian Wu // RUN: cp %S/Inputs/helper_decls_test*  %T/used-helper-decls/
353626516bSHaojian Wu // 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
363626516bSHaojian Wu // RUN: FileCheck -input-file=%T/used-helper-decls/new_helper_decls_test.cpp -check-prefix=CHECK-NEW-CLASS2-CPP %s
373626516bSHaojian Wu // RUN: FileCheck -input-file=%T/used-helper-decls/helper_decls_test.cpp -check-prefix=CHECK-OLD-CLASS2-CPP %s
383626516bSHaojian Wu 
393626516bSHaojian Wu // CHECK-NEW-CLASS2-CPP: #include "{{.*}}new_helper_decls_test.h"
403626516bSHaojian Wu // CHECK-NEW-CLASS2-CPP-SAME: {{[[:space:]]}}
413626516bSHaojian Wu // CHECK-NEW-CLASS2-CPP-NEXT: namespace {
423626516bSHaojian Wu // CHECK-NEW-CLASS2-CPP-NEXT: void HelperFun1() {}
433626516bSHaojian Wu // CHECK-NEW-CLASS2-CPP-NEXT: } // namespace
443626516bSHaojian Wu // CHECK-NEW-CLASS2-CPP-SAME: {{[[:space:]]}}
453626516bSHaojian Wu // CHECK-NEW-CLASS2-CPP-NEXT: static const int K2 = 2;
463626516bSHaojian Wu // CHECK-NEW-CLASS2-CPP-SAME: {{[[:space:]]}}
473626516bSHaojian Wu // CHECK-NEW-CLASS2-CPP-NEXT: static void HelperFun3() { K2; }
483626516bSHaojian Wu // CHECK-NEW-CLASS2-CPP-NEXT: namespace a {
493626516bSHaojian Wu // CHECK-NEW-CLASS2-CPP-NEXT: void Class2::f() {
503626516bSHaojian Wu // CHECK-NEW-CLASS2-CPP-NEXT:   HelperFun1();
513626516bSHaojian Wu // CHECK-NEW-CLASS2-CPP-NEXT:   HelperFun3();
523626516bSHaojian Wu // CHECK-NEW-CLASS2-CPP-NEXT: }
533626516bSHaojian Wu // CHECK-NEW-CLASS2-CPP-NEXT: } // namespace a
543626516bSHaojian Wu 
553626516bSHaojian Wu // CHECK-OLD-CLASS2-CPP: void HelperFun1() {}
563626516bSHaojian Wu // CHECK-OLD-CLASS2-CPP: void HelperFun2() { HelperFun1(); }
573626516bSHaojian Wu // CHECK-OLD-CLASS2-CPP: const int K1 = 1;
583626516bSHaojian Wu // CHECK-OLD-CLASS2-CPP: static const int K2 = 2;
593626516bSHaojian Wu // CHECK-OLD-CLASS2-CPP-NOT: static void HelperFun3() { K2; }
603626516bSHaojian Wu // CHECK-OLD-CLASS2-CPP-NOT: void Class2::f() {
613626516bSHaojian Wu // CHECK-OLD-CLASS2-CPP-NOT:   HelperFun1();
623626516bSHaojian Wu // CHECK-OLD-CLASS2-CPP-NOT:   HelperFun3();
633626516bSHaojian Wu // CHECK-OLD-CLASS2-CPP: void Class5::f() {
643626516bSHaojian Wu // CHECK-OLD-CLASS2-CPP-NEXT: int Result = K1 + K2 + K3;
653626516bSHaojian Wu 
663626516bSHaojian Wu 
673626516bSHaojian Wu // ----------------------------------------------------------------------------
683626516bSHaojian Wu // Test using a static member variable of a helper class.
693626516bSHaojian Wu // ----------------------------------------------------------------------------
703626516bSHaojian Wu // RUN: cp %S/Inputs/helper_decls_test*  %T/used-helper-decls/
713626516bSHaojian Wu // 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
723626516bSHaojian Wu // RUN: FileCheck -input-file=%T/used-helper-decls/new_helper_decls_test.cpp -check-prefix=CHECK-NEW-CLASS3-CPP %s
733626516bSHaojian Wu // RUN: FileCheck -input-file=%T/used-helper-decls/helper_decls_test.cpp -check-prefix=CHECK-OLD-CLASS3-CPP %s
743626516bSHaojian Wu 
753626516bSHaojian Wu // CHECK-NEW-CLASS3-CPP: #include "{{.*}}new_helper_decls_test.h"
763626516bSHaojian Wu // CHECK-NEW-CLASS3-CPP-SAME: {{[[:space:]]}}
773626516bSHaojian Wu // CHECK-NEW-CLASS3-CPP-NEXT: namespace {
783626516bSHaojian Wu // CHECK-NEW-CLASS3-CPP-NEXT: class HelperC1 {
793626516bSHaojian Wu // CHECK-NEW-CLASS3-CPP-NEXT: public:
803626516bSHaojian Wu // CHECK-NEW-CLASS3-CPP-NEXT:   static int I;
813626516bSHaojian Wu // CHECK-NEW-CLASS3-CPP-NEXT: };
823626516bSHaojian Wu // CHECK-NEW-CLASS3-CPP-SAME: {{[[:space:]]}}
833626516bSHaojian Wu // CHECK-NEW-CLASS3-CPP-NEXT: int HelperC1::I = 0;
843626516bSHaojian Wu // CHECK-NEW-CLASS3-CPP-NEXT: } // namespace
853626516bSHaojian Wu // CHECK-NEW-CLASS3-CPP-SAME: {{[[:space:]]}}
863626516bSHaojian Wu // CHECK-NEW-CLASS3-CPP-NEXT: namespace a {
873626516bSHaojian Wu // CHECK-NEW-CLASS3-CPP-NEXT: void Class3::f() { HelperC1::I; }
883626516bSHaojian Wu // CHECK-NEW-CLASS3-CPP-NEXT: } // namespace a
893626516bSHaojian Wu 
903626516bSHaojian Wu // CHECK-OLD-CLASS3-CPP: namespace {
913626516bSHaojian Wu // CHECK-OLD-CLASS3-CPP-NOT: class HelperC1 {
923626516bSHaojian Wu // CHECK-OLD-CLASS3-CPP-NOT: public:
933626516bSHaojian Wu // CHECK-OLD-CLASS3-CPP-NOT:   static int I;
943626516bSHaojian Wu // CHECK-OLD-CLASS3-CPP-NOT: };
953626516bSHaojian Wu // CHECK-OLD-CLASS3-CPP-NOT: int HelperC1::I = 0;
963626516bSHaojian Wu // CHECK-OLD-CLASS3-CPP: class HelperC2 {};
973626516bSHaojian Wu 
983626516bSHaojian Wu 
993626516bSHaojian Wu // ----------------------------------------------------------------------------
1003626516bSHaojian Wu // Test moving helper classes.
1013626516bSHaojian Wu // ----------------------------------------------------------------------------
1023626516bSHaojian Wu // RUN: cp %S/Inputs/helper_decls_test*  %T/used-helper-decls/
1033626516bSHaojian Wu // 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
1043626516bSHaojian Wu // RUN: FileCheck -input-file=%T/used-helper-decls/new_helper_decls_test.cpp -check-prefix=CHECK-NEW-CLASS4-CPP %s
1053626516bSHaojian Wu // RUN: FileCheck -input-file=%T/used-helper-decls/helper_decls_test.cpp -check-prefix=CHECK-OLD-CLASS4-CPP %s
1063626516bSHaojian Wu 
1073626516bSHaojian Wu // CHECK-NEW-CLASS4-CPP: #include "{{.*}}new_helper_decls_test.h"
1083626516bSHaojian Wu // CHECK-NEW-CLASS4-CPP-SAME: {{[[:space:]]}}
1093626516bSHaojian Wu // CHECK-NEW-CLASS4-CPP-NEXT: namespace {
1103626516bSHaojian Wu // CHECK-NEW-CLASS4-CPP-NEXT: class HelperC2 {};
1113626516bSHaojian Wu // CHECK-NEW-CLASS4-CPP-NEXT: } // namespace
1123626516bSHaojian Wu // CHECK-NEW-CLASS4-CPP-SAME: {{[[:space:]]}}
1133626516bSHaojian Wu // CHECK-NEW-CLASS4-CPP-NEXT: namespace a {
1143626516bSHaojian Wu // CHECK-NEW-CLASS4-CPP-NEXT: void Class4::f() { HelperC2 c2; }
1153626516bSHaojian Wu // CHECK-NEW-CLASS4-CPP-NEXT: } // namespace a
1163626516bSHaojian Wu 
1173626516bSHaojian Wu // CHECK-OLD-CLASS4-CPP-NOT: class HelperC2 {};
1183626516bSHaojian Wu 
1193626516bSHaojian Wu 
1203626516bSHaojian Wu // ----------------------------------------------------------------------------
1213626516bSHaojian Wu // Test moving helper variables and helper functions together.
1223626516bSHaojian Wu // ----------------------------------------------------------------------------
1233626516bSHaojian Wu // RUN: cp %S/Inputs/helper_decls_test*  %T/used-helper-decls/
1243626516bSHaojian Wu // 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
1253626516bSHaojian Wu // RUN: FileCheck -input-file=%T/used-helper-decls/new_helper_decls_test.cpp -check-prefix=CHECK-NEW-CLASS5-CPP %s
1263626516bSHaojian Wu // RUN: FileCheck -input-file=%T/used-helper-decls/helper_decls_test.cpp -check-prefix=CHECK-OLD-CLASS5-CPP %s
1273626516bSHaojian Wu 
1283626516bSHaojian Wu // CHECK-NEW-CLASS5-CPP: #include "{{.*}}new_helper_decls_test.h"
1293626516bSHaojian Wu // CHECK-NEW-CLASS5-CPP-SAME: {{[[:space:]]}}
1303626516bSHaojian Wu // CHECK-NEW-CLASS5-CPP-NEXT: namespace {
1313626516bSHaojian Wu // CHECK-NEW-CLASS5-CPP-NEXT: const int K1 = 1;
1323626516bSHaojian Wu // CHECK-NEW-CLASS5-CPP-NEXT: } // namespace
1333626516bSHaojian Wu // CHECK-NEW-CLASS5-CPP-SAME: {{[[:space:]]}}
1343626516bSHaojian Wu // CHECK-NEW-CLASS5-CPP-NEXT: static const int K2 = 2;
1353626516bSHaojian Wu // CHECK-NEW-CLASS5-CPP-NEXT: namespace a {
1363626516bSHaojian Wu // CHECK-NEW-CLASS5-CPP-NEXT: static const int K3 = 3;
1373626516bSHaojian Wu // CHECK-NEW-CLASS5-CPP-SAME: {{[[:space:]]}}
1383626516bSHaojian Wu // CHECK-NEW-CLASS5-CPP-NEXT: static void HelperFun4() {}
1393626516bSHaojian Wu // CHECK-NEW-CLASS5-CPP-SAME: {{[[:space:]]}}
1403626516bSHaojian Wu // CHECK-NEW-CLASS5-CPP-NEXT: void Class5::f() {
1413626516bSHaojian Wu // CHECK-NEW-CLASS5-CPP-NEXT:   int Result = K1 + K2 + K3;
1423626516bSHaojian Wu // CHECK-NEW-CLASS5-CPP-NEXT:   HelperFun4();
1433626516bSHaojian Wu // CHECK-NEW-CLASS5-CPP-NEXT: }
1443626516bSHaojian Wu // CHECK-NEW-CLASS5-CPP-NEXT: } // namespace a
1453626516bSHaojian Wu 
1463626516bSHaojian Wu // CHECK-OLD-CLASS5-CPP-NOT: const int K1 = 1;
1473626516bSHaojian Wu // CHECK-OLD-CLASS5-CPP: static const int K2 = 2;
1483626516bSHaojian Wu // CHECK-OLD-CLASS5-CPP: static void HelperFun3() { K2; }
1493626516bSHaojian Wu // CHECK-OLD-CLASS5-CPP: static const int K4 = HelperC3::I;
1503626516bSHaojian Wu // CHECK-OLD-CLASS5-CPP-NOT: void Class5::f() {
1513626516bSHaojian Wu 
1523626516bSHaojian Wu 
1533626516bSHaojian Wu // ----------------------------------------------------------------------------
154*dd5571d5SKazuaki Ishizaki // Test moving helper variables and their transitively used helper classes.
1553626516bSHaojian Wu // ----------------------------------------------------------------------------
1563626516bSHaojian Wu // RUN: cp %S/Inputs/helper_decls_test*  %T/used-helper-decls/
1573626516bSHaojian Wu // 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
1583626516bSHaojian Wu // RUN: FileCheck -input-file=%T/used-helper-decls/new_helper_decls_test.cpp -check-prefix=CHECK-NEW-CLASS6-CPP %s
1593626516bSHaojian Wu // RUN: FileCheck -input-file=%T/used-helper-decls/helper_decls_test.cpp -check-prefix=CHECK-OLD-CLASS6-CPP %s
1603626516bSHaojian Wu 
1613626516bSHaojian Wu // CHECK-NEW-CLASS6-CPP: #include "{{.*}}new_helper_decls_test.h"
1623626516bSHaojian Wu // CHECK-NEW-CLASS6-CPP-SAME: {{[[:space:]]}}
1633626516bSHaojian Wu // CHECK-NEW-CLASS6-CPP-NEXT: namespace {
1643626516bSHaojian Wu // CHECK-NEW-CLASS6-CPP-NEXT: class HelperC3 {
1653626516bSHaojian Wu // CHECK-NEW-CLASS6-CPP-NEXT: public:
1663626516bSHaojian Wu // CHECK-NEW-CLASS6-CPP-NEXT:   static int I;
1673626516bSHaojian Wu // CHECK-NEW-CLASS6-CPP-NEXT: };
1683626516bSHaojian Wu // CHECK-NEW-CLASS6-CPP-SAME: {{[[:space:]]}}
1693626516bSHaojian Wu // CHECK-NEW-CLASS6-CPP-NEXT: int HelperC3::I = 0;
1703626516bSHaojian Wu // CHECK-NEW-CLASS6-CPP-NEXT: } // namespace
1713626516bSHaojian Wu // CHECK-NEW-CLASS6-CPP-SAME: {{[[:space:]]}}
1723626516bSHaojian Wu // CHECK-NEW-CLASS6-CPP-NEXT: namespace a {
1733626516bSHaojian Wu // CHECK-NEW-CLASS6-CPP-NEXT: static const int K4 = HelperC3::I;
1743626516bSHaojian Wu // CHECK-NEW-CLASS6-CPP-SAME: {{[[:space:]]}}
1753626516bSHaojian Wu // CHECK-NEW-CLASS6-CPP-NEXT: int Class6::f() {
1763626516bSHaojian Wu // CHECK-NEW-CLASS6-CPP-NEXT:   int R = K4;
1773626516bSHaojian Wu // CHECK-NEW-CLASS6-CPP-NEXT:   return R;
1783626516bSHaojian Wu // CHECK-NEW-CLASS6-CPP-NEXT: }
1793626516bSHaojian Wu // CHECK-NEW-CLASS6-CPP-NEXT: } // namespace a
1803626516bSHaojian Wu 
1813626516bSHaojian Wu // CHECK-OLD-CLASS6-CPP-NOT: class HelperC3 {
1823626516bSHaojian Wu // CHECK-OLD-CLASS6-CPP-NOT: int HelperC3::I = 0;
1833626516bSHaojian Wu // CHECK-OLD-CLASS6-CPP-NOT: static const int K4 = HelperC3::I;
1843626516bSHaojian Wu 
1853626516bSHaojian Wu 
1863626516bSHaojian Wu // ----------------------------------------------------------------------------
1873626516bSHaojian Wu // Test moving classes where its methods use helpers.
1883626516bSHaojian Wu // ----------------------------------------------------------------------------
1893626516bSHaojian Wu // RUN: cp %S/Inputs/helper_decls_test*  %T/used-helper-decls/
1903626516bSHaojian Wu // 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
1913626516bSHaojian Wu // RUN: FileCheck -input-file=%T/used-helper-decls/new_helper_decls_test.cpp -check-prefix=CHECK-NEW-CLASS7-CPP %s
1923626516bSHaojian Wu // RUN: FileCheck -input-file=%T/used-helper-decls/helper_decls_test.cpp -check-prefix=CHECK-OLD-CLASS7-CPP %s
1933626516bSHaojian Wu 
1943626516bSHaojian Wu // CHECK-NEW-CLASS7-CPP: #include "{{.*}}new_helper_decls_test.h"
1953626516bSHaojian Wu // CHECK-NEW-CLASS7-CPP-SAME: {{[[:space:]]}}
1963626516bSHaojian Wu // CHECK-NEW-CLASS7-CPP-NEXT: namespace a {
1973626516bSHaojian Wu // CHECK-NEW-CLASS7-CPP-NEXT: static const int K6 = 6;
1983626516bSHaojian Wu // CHECK-NEW-CLASS7-CPP-SAME: {{[[:space:]]}}
1993626516bSHaojian Wu // CHECK-NEW-CLASS7-CPP-NEXT: static void HelperFun6() {}
2003626516bSHaojian Wu // CHECK-NEW-CLASS7-CPP-SAME: {{[[:space:]]}}
2013626516bSHaojian Wu // CHECK-NEW-CLASS7-CPP-NEXT: int Class7::f() {
2023626516bSHaojian Wu // CHECK-NEW-CLASS7-CPP-NEXT:   int R = K6;
2033626516bSHaojian Wu // CHECK-NEW-CLASS7-CPP-NEXT:   return R;
2043626516bSHaojian Wu // CHECK-NEW-CLASS7-CPP-NEXT: }
2053626516bSHaojian Wu // CHECK-NEW-CLASS7-CPP-SAME: {{[[:space:]]}}
2063626516bSHaojian Wu // CHECK-NEW-CLASS7-CPP-NEXT: int Class7::g() {
2073626516bSHaojian Wu // CHECK-NEW-CLASS7-CPP-NEXT:   HelperFun6();
2083626516bSHaojian Wu // CHECK-NEW-CLASS7-CPP-NEXT:   return 1;
2093626516bSHaojian Wu // CHECK-NEW-CLASS7-CPP-NEXT: }
2103626516bSHaojian Wu // CHECK-NEW-CLASS7-CPP-NEXT: } // namespace a
2113626516bSHaojian Wu //
2123626516bSHaojian Wu // CHECK-OLD-CLASS7-CPP-NOT: static const int K6 = 6;
2133626516bSHaojian Wu // CHECK-OLD-CLASS7-CPP-NOT: static void HelperFun6() {}
2143626516bSHaojian Wu // CHECK-OLD-CLASS7-CPP-NOT: int Class7::f() {
2153626516bSHaojian Wu // CHECK-OLD-CLASS7-CPP-NOT: int Class7::g() {
2163626516bSHaojian Wu 
2173626516bSHaojian Wu 
2183626516bSHaojian Wu // ----------------------------------------------------------------------------
219*dd5571d5SKazuaki Ishizaki // Test moving helper function and its transitively used helper variables.
2203626516bSHaojian Wu // ----------------------------------------------------------------------------
2213626516bSHaojian Wu // RUN: cp %S/Inputs/helper_decls_test*  %T/used-helper-decls/
2223626516bSHaojian Wu // 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
2233626516bSHaojian Wu // RUN: FileCheck -input-file=%T/used-helper-decls/new_helper_decls_test.cpp -check-prefix=CHECK-NEW-FUN1-CPP %s
2243626516bSHaojian Wu // RUN: FileCheck -input-file=%T/used-helper-decls/helper_decls_test.cpp -check-prefix=CHECK-OLD-FUN1-CPP %s
2253626516bSHaojian Wu 
2263626516bSHaojian Wu // CHECK-NEW-FUN1-CPP: #include "{{.*}}new_helper_decls_test.h"
2273626516bSHaojian Wu // CHECK-NEW-FUN1-CPP-SAME: {{[[:space:]]}}
2283626516bSHaojian Wu // CHECK-NEW-FUN1-CPP-NEXT: namespace a {
2293626516bSHaojian Wu // CHECK-NEW-FUN1-CPP-NEXT: static const int K5 = 5;
2303626516bSHaojian Wu // CHECK-NEW-FUN1-CPP-SAME: {{[[:space:]]}}
2313626516bSHaojian Wu // CHECK-NEW-FUN1-CPP-NEXT: static int HelperFun5() {
2323626516bSHaojian Wu // CHECK-NEW-FUN1-CPP-NEXT:   int R = K5;
2333626516bSHaojian Wu // CHECK-NEW-FUN1-CPP-NEXT:   return R;
2343626516bSHaojian Wu // CHECK-NEW-FUN1-CPP-NEXT: }
2353626516bSHaojian Wu // CHECK-NEW-FUN1-CPP-SAME: {{[[:space:]]}}
2363626516bSHaojian Wu // CHECK-NEW-FUN1-CPP-NEXT: void Fun1() { HelperFun5(); }
2373626516bSHaojian Wu // CHECK-NEW-FUN1-CPP-NEXT: } // namespace a
2383626516bSHaojian Wu 
2393626516bSHaojian Wu // CHECK-OLD-FUN1-CPP-NOT: static const int K5 = 5;
2403626516bSHaojian Wu // CHECK-OLD-FUN1-CPP-NOT: static int HelperFun5() {
2413626516bSHaojian Wu // CHECK-OLD-FUN1-CPP-NOT: void Fun1() { HelperFun5(); }
2423626516bSHaojian Wu 
2433626516bSHaojian Wu 
2443626516bSHaojian Wu // ----------------------------------------------------------------------------
2453626516bSHaojian Wu // Test no moving helpers when moving inline functions in header.
2463626516bSHaojian Wu // ----------------------------------------------------------------------------
2473626516bSHaojian Wu // RUN: cp %S/Inputs/helper_decls_test*  %T/used-helper-decls/
2483626516bSHaojian Wu // 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
2493626516bSHaojian Wu // RUN: FileCheck -input-file=%T/used-helper-decls/new_helper_decls_test.cpp -check-prefix=CHECK-NEW-FUN2-CPP %s
2503626516bSHaojian Wu // RUN: FileCheck -input-file=%T/used-helper-decls/new_helper_decls_test.h -check-prefix=CHECK-NEW-FUN2-H %s
2513626516bSHaojian Wu // RUN: FileCheck -input-file=%T/used-helper-decls/helper_decls_test.h -check-prefix=CHECK-OLD-FUN2-H %s
2523626516bSHaojian Wu 
2533626516bSHaojian Wu // CHECK-NEW-FUN2-H: namespace a {
2543626516bSHaojian Wu // CHECK-NEW-FUN2-H-NEXT: inline void Fun2() {}
2553626516bSHaojian Wu // CHECK-NEW-FUN2-H-NEXT: } // namespace a
2563626516bSHaojian Wu 
2573626516bSHaojian Wu // CHECK-NEW-FUN2-CPP: #include "{{.*}}new_helper_decls_test.h"
2583626516bSHaojian Wu // CHECK-NEW-FUN2-CPP-SAME: {{[[:space:]]}}
2593626516bSHaojian Wu 
2603626516bSHaojian Wu // CHECK-OLD-FUN2-H-NOT: inline void Fun2() {}
2613626516bSHaojian Wu 
2624775ce56SHaojian Wu // ----------------------------------------------------------------------------
263*dd5571d5SKazuaki Ishizaki // Test moving used helper function and its transitively used functions.
2644775ce56SHaojian Wu // ----------------------------------------------------------------------------
2654775ce56SHaojian Wu // RUN: cp %S/Inputs/helper_decls_test*  %T/used-helper-decls/
2664775ce56SHaojian Wu // 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
2674775ce56SHaojian Wu // RUN: FileCheck -input-file=%T/used-helper-decls/new_helper_decls_test.cpp -check-prefix=CHECK-NEW-FUN3-CPP %s
2684775ce56SHaojian Wu // RUN: FileCheck -input-file=%T/used-helper-decls/helper_decls_test.cpp -check-prefix=CHECK-OLD-FUN3-CPP %s
2694775ce56SHaojian Wu 
2704775ce56SHaojian Wu // CHECK-NEW-FUN3-CPP: #include "{{.*}}new_helper_decls_test.h"
2714775ce56SHaojian Wu // CHECK-NEW-FUN3-CPP-SAME: {{[[:space:]]}}
2724775ce56SHaojian Wu // CHECK-NEW-FUN3-CPP-NEXT: namespace b {
2734775ce56SHaojian Wu // CHECK-NEW-FUN3-CPP-NEXT: namespace {
2744775ce56SHaojian Wu // CHECK-NEW-FUN3-CPP-NEXT: void HelperFun7();
2754775ce56SHaojian Wu // CHECK-NEW-FUN3-CPP-SAME: {{[[:space:]]}}
2764775ce56SHaojian Wu // CHECK-NEW-FUN3-CPP-NEXT: class HelperC4;
2774775ce56SHaojian Wu // CHECK-NEW-FUN3-CPP-NEXT: } // namespace
2784775ce56SHaojian Wu // CHECK-NEW-FUN3-CPP-SAME: {{[[:space:]]}}
2794775ce56SHaojian Wu // CHECK-NEW-FUN3-CPP-NEXT: void Fun3() {
2804775ce56SHaojian Wu // CHECK-NEW-FUN3-CPP-NEXT:   HelperFun7();
2814775ce56SHaojian Wu // CHECK-NEW-FUN3-CPP-NEXT:   HelperC4 *t;
2824775ce56SHaojian Wu // CHECK-NEW-FUN3-CPP-NEXT: }
2834775ce56SHaojian Wu // CHECK-NEW-FUN3-CPP-NEXT: namespace {
2844775ce56SHaojian Wu // CHECK-NEW-FUN3-CPP-NEXT: void HelperFun7() {}
2854775ce56SHaojian Wu // CHECK-NEW-FUN3-CPP-SAME: {{[[:space:]]}}
2864775ce56SHaojian Wu // CHECK-NEW-FUN3-CPP-NEXT: class HelperC4 {};
2874775ce56SHaojian Wu // CHECK-NEW-FUN3-CPP-NEXT: } // namespace
2884775ce56SHaojian Wu // CHECK-NEW-FUN3-CPP-NEXT: } // namespace b
2894775ce56SHaojian Wu //
2904775ce56SHaojian Wu // CHECK-OLD-FUN3-CPP-NOT: void HelperFun7();
2914775ce56SHaojian Wu // CHECK-OLD-FUN3-CPP-NOT: void HelperFun7() {}
2924775ce56SHaojian Wu // CHECK-OLD-FUN3-CPP-NOT: void Fun3() { HelperFun7(); }
2933626516bSHaojian Wu 
2943626516bSHaojian Wu // ----------------------------------------------------------------------------
2953626516bSHaojian Wu // Test moving all symbols in headers.
2963626516bSHaojian Wu // ----------------------------------------------------------------------------
2973626516bSHaojian Wu // RUN: cp %S/Inputs/helper_decls_test*  %T/used-helper-decls/
2984775ce56SHaojian Wu // 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
2993626516bSHaojian Wu // RUN: FileCheck -input-file=%T/used-helper-decls/new_helper_decls_test.h -check-prefix=CHECK-NEW-H %s
3003626516bSHaojian Wu // RUN: FileCheck -input-file=%T/used-helper-decls/new_helper_decls_test.cpp -check-prefix=CHECK-NEW-CPP %s
3013626516bSHaojian Wu // RUN: FileCheck -input-file=%T/used-helper-decls/helper_decls_test.h -allow-empty -check-prefix=CHECK-EMPTY %s
3023626516bSHaojian Wu // RUN: FileCheck -input-file=%T/used-helper-decls/helper_decls_test.cpp -allow-empty -check-prefix=CHECK-EMPTY %s
3033626516bSHaojian Wu 
3043626516bSHaojian Wu 
3053626516bSHaojian Wu // CHECK-NEW-H: namespace a {
3063626516bSHaojian Wu // CHECK-NEW-H-NEXT: class Class1 {
3073626516bSHaojian Wu // CHECK-NEW-H-NEXT:   void f();
3083626516bSHaojian Wu // CHECK-NEW-H-NEXT: };
3093626516bSHaojian Wu // CHECK-NEW-H-SAME: {{[[:space:]]}}
3103626516bSHaojian Wu // CHECK-NEW-H-NEXT: class Class2 {
3113626516bSHaojian Wu // CHECK-NEW-H-NEXT:   void f();
3123626516bSHaojian Wu // CHECK-NEW-H-NEXT: };
3133626516bSHaojian Wu // CHECK-NEW-H-SAME: {{[[:space:]]}}
3143626516bSHaojian Wu // CHECK-NEW-H-NEXT: class Class3 {
3153626516bSHaojian Wu // CHECK-NEW-H-NEXT:   void f();
3163626516bSHaojian Wu // CHECK-NEW-H-NEXT: };
3173626516bSHaojian Wu // CHECK-NEW-H-SAME: {{[[:space:]]}}
3183626516bSHaojian Wu // CHECK-NEW-H-NEXT: class Class4 {
3193626516bSHaojian Wu // CHECK-NEW-H-NEXT:   void f();
3203626516bSHaojian Wu // CHECK-NEW-H-NEXT: };
3213626516bSHaojian Wu // CHECK-NEW-H-SAME: {{[[:space:]]}}
3223626516bSHaojian Wu // CHECK-NEW-H-NEXT: class Class5 {
3233626516bSHaojian Wu // CHECK-NEW-H-NEXT:   void f();
3243626516bSHaojian Wu // CHECK-NEW-H-NEXT: };
3253626516bSHaojian Wu // CHECK-NEW-H-SAME: {{[[:space:]]}}
3263626516bSHaojian Wu // CHECK-NEW-H-NEXT: class Class6 {
3273626516bSHaojian Wu // CHECK-NEW-H-NEXT:   int f();
3283626516bSHaojian Wu // CHECK-NEW-H-NEXT: };
3293626516bSHaojian Wu // CHECK-NEW-H-SAME: {{[[:space:]]}}
3303626516bSHaojian Wu // CHECK-NEW-H-NEXT: class Class7 {
3313626516bSHaojian Wu // CHECK-NEW-H-NEXT:   int f();
3323626516bSHaojian Wu // CHECK-NEW-H-NEXT:   int g();
3333626516bSHaojian Wu // CHECK-NEW-H-NEXT: };
3343626516bSHaojian Wu // CHECK-NEW-H-SAME: {{[[:space:]]}}
3353626516bSHaojian Wu // CHECK-NEW-H-NEXT: void Fun1();
3363626516bSHaojian Wu // CHECK-NEW-H-SAME: {{[[:space:]]}}
3373626516bSHaojian Wu // CHECK-NEW-H-NEXT: inline void Fun2() {}
33820505898SKrasimir Georgiev // CHECK-NEW-H-SAME: {{[[:space:]]}}
3393626516bSHaojian Wu // CHECK-NEW-H-NEXT: } // namespace a
3403626516bSHaojian Wu 
3413626516bSHaojian Wu 
3423626516bSHaojian Wu // CHECK-NEW-CPP: namespace {
3433626516bSHaojian Wu // CHECK-NEW-CPP-NEXT: class HelperC1 {
3443626516bSHaojian Wu // CHECK-NEW-CPP-NEXT: public:
3453626516bSHaojian Wu // CHECK-NEW-CPP-NEXT:   static int I;
3463626516bSHaojian Wu // CHECK-NEW-CPP-NEXT: };
3473626516bSHaojian Wu // CHECK-NEW-CPP-SAME: {{[[:space:]]}}
3483626516bSHaojian Wu // CHECK-NEW-CPP-NEXT: int HelperC1::I = 0;
3493626516bSHaojian Wu // CHECK-NEW-CPP-SAME: {{[[:space:]]}}
3503626516bSHaojian Wu // CHECK-NEW-CPP-NEXT: class HelperC2 {};
3513626516bSHaojian Wu // CHECK-NEW-CPP-SAME: {{[[:space:]]}}
3523626516bSHaojian Wu // CHECK-NEW-CPP-NEXT: class HelperC3 {
3533626516bSHaojian Wu // CHECK-NEW-CPP-NEXT:  public:
3543626516bSHaojian Wu // CHECK-NEW-CPP-NEXT:   static int I;
3553626516bSHaojian Wu // CHECK-NEW-CPP-NEXT: };
3563626516bSHaojian Wu // CHECK-NEW-CPP-SAME: {{[[:space:]]}}
3573626516bSHaojian Wu // CHECK-NEW-CPP-NEXT: int HelperC3::I = 0;
3583626516bSHaojian Wu // CHECK-NEW-CPP-SAME: {{[[:space:]]}}
3593626516bSHaojian Wu // CHECK-NEW-CPP-NEXT: void HelperFun1() {}
3603626516bSHaojian Wu // CHECK-NEW-CPP-SAME: {{[[:space:]]}}
3613626516bSHaojian Wu // CHECK-NEW-CPP-NEXT: void HelperFun2() { HelperFun1(); }
3623626516bSHaojian Wu // CHECK-NEW-CPP-SAME: {{[[:space:]]}}
3633626516bSHaojian Wu // CHECK-NEW-CPP-NEXT: const int K1 = 1;
3643626516bSHaojian Wu // CHECK-NEW-CPP-NEXT: } // namespace
3653626516bSHaojian Wu // CHECK-NEW-CPP-SAME: {{[[:space:]]}}
3663626516bSHaojian Wu // CHECK-NEW-CPP-NEXT: static const int K2 = 2;
3673626516bSHaojian Wu // CHECK-NEW-CPP-NEXT: static void HelperFun3() { K2; }
3683626516bSHaojian Wu // CHECK-NEW-CPP-SAME: {{[[:space:]]}}
3693626516bSHaojian Wu // CHECK-NEW-CPP-NEXT: namespace a {
3703626516bSHaojian Wu // CHECK-NEW-CPP-SAME: {{[[:space:]]}}
3713626516bSHaojian Wu // CHECK-NEW-CPP-NEXT: static const int K3 = 3;
3723626516bSHaojian Wu // CHECK-NEW-CPP-NEXT: static const int K4 = HelperC3::I;
3733626516bSHaojian Wu // CHECK-NEW-CPP-NEXT: static const int K5 = 5;
3743626516bSHaojian Wu // CHECK-NEW-CPP-NEXT: static const int K6 = 6;
3753626516bSHaojian Wu // CHECK-NEW-CPP-SAME: {{[[:space:]]}}
3763626516bSHaojian Wu // CHECK-NEW-CPP-NEXT: static void HelperFun4() {}
3773626516bSHaojian Wu // CHECK-NEW-CPP-NEXT: static void HelperFun6() {}
3783626516bSHaojian Wu // CHECK-NEW-CPP-SAME: {{[[:space:]]}}
3793626516bSHaojian Wu // CHECK-NEW-CPP-NEXT: void Class1::f() { HelperFun2(); }
3803626516bSHaojian Wu // CHECK-NEW-CPP-SAME: {{[[:space:]]}}
3813626516bSHaojian Wu // CHECK-NEW-CPP-NEXT: void Class2::f() {
3823626516bSHaojian Wu // CHECK-NEW-CPP-NEXT:   HelperFun1();
3833626516bSHaojian Wu // CHECK-NEW-CPP-NEXT:   HelperFun3();
3843626516bSHaojian Wu // CHECK-NEW-CPP-NEXT: }
3853626516bSHaojian Wu // CHECK-NEW-CPP-SAME: {{[[:space:]]}}
3863626516bSHaojian Wu // CHECK-NEW-CPP-NEXT: void Class3::f() { HelperC1::I; }
3873626516bSHaojian Wu // CHECK-NEW-CPP-SAME: {{[[:space:]]}}
3883626516bSHaojian Wu // CHECK-NEW-CPP-NEXT: void Class4::f() { HelperC2 c2; }
3893626516bSHaojian Wu // CHECK-NEW-CPP-SAME: {{[[:space:]]}}
3903626516bSHaojian Wu // CHECK-NEW-CPP-NEXT: void Class5::f() {
3913626516bSHaojian Wu // CHECK-NEW-CPP-NEXT:   int Result = K1 + K2 + K3;
3923626516bSHaojian Wu // CHECK-NEW-CPP-NEXT:   HelperFun4();
3933626516bSHaojian Wu // CHECK-NEW-CPP-NEXT: }
3943626516bSHaojian Wu // CHECK-NEW-CPP-SAME: {{[[:space:]]}}
3953626516bSHaojian Wu // CHECK-NEW-CPP-NEXT: int Class6::f() {
3963626516bSHaojian Wu // CHECK-NEW-CPP-NEXT:   int R = K4;
3973626516bSHaojian Wu // CHECK-NEW-CPP-NEXT:   return R;
3983626516bSHaojian Wu // CHECK-NEW-CPP-NEXT: }
3993626516bSHaojian Wu // CHECK-NEW-CPP-SAME: {{[[:space:]]}}
4003626516bSHaojian Wu // CHECK-NEW-CPP-NEXT: int Class7::f() {
4013626516bSHaojian Wu // CHECK-NEW-CPP-NEXT:   int R = K6;
4023626516bSHaojian Wu // CHECK-NEW-CPP-NEXT:   return R;
4033626516bSHaojian Wu // CHECK-NEW-CPP-NEXT: }
4043626516bSHaojian Wu // CHECK-NEW-CPP-SAME: {{[[:space:]]}}
4053626516bSHaojian Wu // CHECK-NEW-CPP-NEXT: int Class7::g() {
4063626516bSHaojian Wu // CHECK-NEW-CPP-NEXT:   HelperFun6();
4073626516bSHaojian Wu // CHECK-NEW-CPP-NEXT:   return 1;
4083626516bSHaojian Wu // CHECK-NEW-CPP-NEXT: }
4093626516bSHaojian Wu // CHECK-NEW-CPP-SAME: {{[[:space:]]}}
4103626516bSHaojian Wu // CHECK-NEW-CPP-NEXT: static int HelperFun5() {
4113626516bSHaojian Wu // CHECK-NEW-CPP-NEXT:   int R = K5;
4123626516bSHaojian Wu // CHECK-NEW-CPP-NEXT:   return R;
4133626516bSHaojian Wu // CHECK-NEW-CPP-NEXT: }
4143626516bSHaojian Wu // CHECK-NEW-CPP-SAME: {{[[:space:]]}}
4153626516bSHaojian Wu // CHECK-NEW-CPP-NEXT: void Fun1() { HelperFun5(); }
41620505898SKrasimir Georgiev // CHECK-NEW-CPP-SAME: {{[[:space:]]}}
4173626516bSHaojian Wu // CHECK-NEW-CPP-NEXT: } // namespace a
4184775ce56SHaojian Wu // CHECK-NEW-CPP-SAME: {{[[:space:]]}}
4194775ce56SHaojian Wu // CHECK-NEW-CPP-NEXT: namespace b {
4204775ce56SHaojian Wu // CHECK-NEW-CPP-NEXT: namespace {
4214775ce56SHaojian Wu // CHECK-NEW-CPP-NEXT: void HelperFun7();
4224775ce56SHaojian Wu // CHECK-NEW-CPP-SAME: {{[[:space:]]}}
4234775ce56SHaojian Wu // CHECK-NEW-CPP-NEXT: class HelperC4;
4244775ce56SHaojian Wu // CHECK-NEW-CPP-NEXT: } // namespace
4254775ce56SHaojian Wu // CHECK-NEW-CPP-SAME: {{[[:space:]]}}
4264775ce56SHaojian Wu // CHECK-NEW-CPP-NEXT: void Fun3() {
4274775ce56SHaojian Wu // CHECK-NEW-CPP-NEXT:   HelperFun7();
4284775ce56SHaojian Wu // CHECK-NEW-CPP-NEXT:   HelperC4 *t;
4294775ce56SHaojian Wu // CHECK-NEW-CPP-NEXT: }
4304775ce56SHaojian Wu // CHECK-NEW-CPP-SAME: {{[[:space:]]}}
4314775ce56SHaojian Wu // CHECK-NEW-CPP-NEXT: namespace {
4324775ce56SHaojian Wu // CHECK-NEW-CPP-NEXT: void HelperFun7() {}
4334775ce56SHaojian Wu // CHECK-NEW-CPP-SAME: {{[[:space:]]}}
4344775ce56SHaojian Wu // CHECK-NEW-CPP-NEXT: class HelperC4 {};
4354775ce56SHaojian Wu // CHECK-NEW-CPP-NEXT: } // namespace
4364775ce56SHaojian Wu // CHECK-NEW-CPP-NEXT: } // namespace b
4373626516bSHaojian Wu 
4383626516bSHaojian Wu // CHECK-EMPTY: {{^}}{{$}}
439