189a1d03eSRichard // RUN: %check_clang_tidy -format-style=LLVM -check-suffix=DEFAULT %s \ 289a1d03eSRichard // RUN: modernize-replace-disallow-copy-and-assign-macro %t 389a1d03eSRichard 489a1d03eSRichard // RUN: %check_clang_tidy -format-style=LLVM -check-suffix=DIFFERENT-NAME %s \ 589a1d03eSRichard // RUN: modernize-replace-disallow-copy-and-assign-macro %t \ 6*e8a3ddafSNathan James // RUN: -config="{CheckOptions: { \ 7*e8a3ddafSNathan James // RUN: modernize-replace-disallow-copy-and-assign-macro.MacroName: \ 8*e8a3ddafSNathan James // RUN: MY_MACRO_NAME}}" 989a1d03eSRichard 1089a1d03eSRichard // RUN: %check_clang_tidy -format-style=LLVM -check-suffix=FINALIZE %s \ 1189a1d03eSRichard // RUN: modernize-replace-disallow-copy-and-assign-macro %t \ 12*e8a3ddafSNathan James // RUN: -config="{CheckOptions: { \ 13*e8a3ddafSNathan James // RUN: modernize-replace-disallow-copy-and-assign-macro.MacroName: \ 14*e8a3ddafSNathan James // RUN: DISALLOW_COPY_AND_ASSIGN_FINALIZE}}" 1589a1d03eSRichard 1689a1d03eSRichard // RUN: clang-tidy %s -checks="-*,modernize-replace-disallow-copy-and-assign-macro" \ 17*e8a3ddafSNathan James // RUN: -config="{CheckOptions: { \ 18*e8a3ddafSNathan James // RUN: modernize-replace-disallow-copy-and-assign-macro.MacroName: \ 19*e8a3ddafSNathan James // RUN: DISALLOW_COPY_AND_ASSIGN_MORE_AGUMENTS}}" -- -Wno-extra-semi | count 0 2089a1d03eSRichard 2189a1d03eSRichard // RUN: clang-tidy %s -checks="-*,modernize-replace-disallow-copy-and-assign-macro" \ 22*e8a3ddafSNathan James // RUN: -config="{CheckOptions: { \ 23*e8a3ddafSNathan James // RUN: modernize-replace-disallow-copy-and-assign-macro.MacroName: \ 24*e8a3ddafSNathan James // RUN: DISALLOW_COPY_AND_ASSIGN_NEEDS_PREEXPANSION}}" -- -Wno-extra-semi | count 0 2589a1d03eSRichard 2689a1d03eSRichard // Note: the last two tests expect no diagnostics, but FileCheck cannot handle 2789a1d03eSRichard // that, hence the use of | count 0. 2889a1d03eSRichard 2989a1d03eSRichard #define DISALLOW_COPY_AND_ASSIGN(TypeName) 3089a1d03eSRichard 3189a1d03eSRichard class TestClass1 { 3289a1d03eSRichard private: 3389a1d03eSRichard DISALLOW_COPY_AND_ASSIGN(TestClass1); 3489a1d03eSRichard }; 3589a1d03eSRichard // CHECK-MESSAGES-DEFAULT: :[[@LINE-2]]:3: warning: prefer deleting copy constructor and assignment operator over using macro 'DISALLOW_COPY_AND_ASSIGN' [modernize-replace-disallow-copy-and-assign-macro] 3689a1d03eSRichard // CHECK-FIXES-DEFAULT: {{^}} TestClass1(const TestClass1 &) = delete;{{$}} 3789a1d03eSRichard // CHECK-FIXES-DEFAULT-NEXT: {{^}} const TestClass1 &operator=(const TestClass1 &) = delete;{{$}} 3889a1d03eSRichard 3989a1d03eSRichard #define MY_MACRO_NAME(TypeName) 4089a1d03eSRichard 4189a1d03eSRichard class TestClass2 { 4289a1d03eSRichard private: 4389a1d03eSRichard MY_MACRO_NAME(TestClass2); 4489a1d03eSRichard }; 4589a1d03eSRichard // CHECK-MESSAGES-DIFFERENT-NAME: :[[@LINE-2]]:3: warning: prefer deleting copy constructor and assignment operator over using macro 'MY_MACRO_NAME' [modernize-replace-disallow-copy-and-assign-macro] 4689a1d03eSRichard // CHECK-FIXES-DIFFERENT-NAME: {{^}} TestClass2(const TestClass2 &) = delete;{{$}} 4789a1d03eSRichard // CHECK-FIXES-DIFFERENT-NAME-NEXT: {{^}} const TestClass2 &operator=(const TestClass2 &) = delete;{{$}} 4889a1d03eSRichard 4989a1d03eSRichard #define DISALLOW_COPY_AND_ASSIGN_FINALIZE(TypeName) \ 5089a1d03eSRichard TypeName(const TypeName &) = delete; \ 5189a1d03eSRichard const TypeName &operator=(const TypeName &) = delete; 5289a1d03eSRichard 5389a1d03eSRichard class TestClass3 { 5489a1d03eSRichard private: 5589a1d03eSRichard // Notice, that the macro allows to be used without a semicolon because the 5689a1d03eSRichard // macro definition already contains one above. Therefore our replacement must 5789a1d03eSRichard // contain a semicolon at the end. 5889a1d03eSRichard DISALLOW_COPY_AND_ASSIGN_FINALIZE(TestClass3) 5989a1d03eSRichard }; 6089a1d03eSRichard // CHECK-MESSAGES-FINALIZE: :[[@LINE-2]]:3: warning: prefer deleting copy constructor and assignment operator over using macro 'DISALLOW_COPY_AND_ASSIGN_FINALIZE' [modernize-replace-disallow-copy-and-assign-macro] 6189a1d03eSRichard // CHECK-FIXES-FINALIZE: {{^}} TestClass3(const TestClass3 &) = delete;{{$}} 6289a1d03eSRichard // CHECK-FIXES-FINALIZE-NEXT: {{^}} const TestClass3 &operator=(const TestClass3 &) = delete;{{$}} 6389a1d03eSRichard 6489a1d03eSRichard #define DISALLOW_COPY_AND_ASSIGN_MORE_AGUMENTS(A, B) 6589a1d03eSRichard 6689a1d03eSRichard class TestClass4 { 6789a1d03eSRichard private: 6889a1d03eSRichard DISALLOW_COPY_AND_ASSIGN_MORE_AGUMENTS(TestClass4, TestClass4); 6989a1d03eSRichard }; 7089a1d03eSRichard // CHECK-MESSAGES-MORE-ARGUMENTS-NOT: warning: prefer deleting copy constructor and assignment operator over using macro 'DISALLOW_COPY_AND_ASSIGN_MORE_AGUMENTS' 7189a1d03eSRichard 7289a1d03eSRichard #define DISALLOW_COPY_AND_ASSIGN_NEEDS_PREEXPANSION(A) 7389a1d03eSRichard #define TESTCLASS TestClass5 7489a1d03eSRichard 7589a1d03eSRichard class TestClass5 { 7689a1d03eSRichard private: 7789a1d03eSRichard DISALLOW_COPY_AND_ASSIGN_NEEDS_PREEXPANSION(TESTCLASS); 7889a1d03eSRichard }; 7989a1d03eSRichard // CHECK-MESSAGES-MORE-ARGUMENTS-NOT: warning: prefer deleting copy constructor and assignment operator over using macro 'DISALLOW_COPY_AND_ASSIGN_NEEDS_PREEXPANSION' 80