189a1d03eSRichard // RUN: %check_clang_tidy %s modernize-use-default-member-init %t -- \ 2*e8a3ddafSNathan James // RUN: -config="{CheckOptions: {modernize-use-default-member-init.UseAssignment: true}}" 389a1d03eSRichard 489a1d03eSRichard struct S { 589a1d03eSRichard }; 689a1d03eSRichard 789a1d03eSRichard struct PositiveValueChar { PositiveValueCharPositiveValueChar889a1d03eSRichard PositiveValueChar() : c0(), c1()/*, c2(), c3()*/ {} 989a1d03eSRichard // CHECK-FIXES: PositiveValueChar() {} 1089a1d03eSRichard const char c0; 1189a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:14: warning: use default member initializer for 'c0' [modernize-use-default-member-init] 1289a1d03eSRichard // CHECK-FIXES: const char c0 = '\0'; 1389a1d03eSRichard wchar_t c1; 1489a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:11: warning: use default member initializer for 'c1' 1589a1d03eSRichard // CHECK-FIXES: wchar_t c1 = L'\0'; 1689a1d03eSRichard // FIXME: char16_t c2; 1789a1d03eSRichard // C HECK-MESSAGES: :[[@LINE-1]]:12: warning: use default member initializer for 'c2' 1889a1d03eSRichard // C HECK-FIXES: char16_t c2 = u'\0'; 1989a1d03eSRichard // FIXME: char32_t c3; 2089a1d03eSRichard // C HECK-MESSAGES: :[[@LINE-1]]:12: warning: use default member initializer for 'c3' 2189a1d03eSRichard // C HECK-FIXES: char32_t c3 = U'\0'; 2289a1d03eSRichard }; 2389a1d03eSRichard 2489a1d03eSRichard struct PositiveChar { PositiveCharPositiveChar2589a1d03eSRichard PositiveChar() : d('a') {} 2689a1d03eSRichard // CHECK-FIXES: PositiveChar() {} 2789a1d03eSRichard char d; 2889a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:8: warning: use default member initializer for 'd' 2989a1d03eSRichard // CHECK-FIXES: char d = 'a'; 3089a1d03eSRichard }; 3189a1d03eSRichard 3289a1d03eSRichard struct PositiveValueInt { PositiveValueIntPositiveValueInt3389a1d03eSRichard PositiveValueInt() : i() {} 3489a1d03eSRichard // CHECK-FIXES: PositiveValueInt() {} 3589a1d03eSRichard const int i; 3689a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:13: warning: use default member initializer for 'i' 3789a1d03eSRichard // CHECK-FIXES: const int i = 0; 3889a1d03eSRichard }; 3989a1d03eSRichard 4089a1d03eSRichard struct PositiveInt { PositiveIntPositiveInt4189a1d03eSRichard PositiveInt() : j(1) {} 4289a1d03eSRichard // CHECK-FIXES: PositiveInt() {} 4389a1d03eSRichard int j; 4489a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use default member initializer for 'j' 4589a1d03eSRichard // CHECK-FIXES: int j = 1; 4689a1d03eSRichard }; 4789a1d03eSRichard 4889a1d03eSRichard struct PositiveUnaryMinusInt { PositiveUnaryMinusIntPositiveUnaryMinusInt4989a1d03eSRichard PositiveUnaryMinusInt() : j(-1) {} 5089a1d03eSRichard // CHECK-FIXES: PositiveUnaryMinusInt() {} 5189a1d03eSRichard int j; 5289a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use default member initializer for 'j' 5389a1d03eSRichard // CHECK-FIXES: int j = -1; 5489a1d03eSRichard }; 5589a1d03eSRichard 5689a1d03eSRichard struct PositiveUnaryPlusInt { PositiveUnaryPlusIntPositiveUnaryPlusInt5789a1d03eSRichard PositiveUnaryPlusInt() : j(+1) {} 5889a1d03eSRichard // CHECK-FIXES: PositiveUnaryPlusInt() {} 5989a1d03eSRichard int j; 6089a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use default member initializer for 'j' 6189a1d03eSRichard // CHECK-FIXES: int j = +1; 6289a1d03eSRichard }; 6389a1d03eSRichard 6489a1d03eSRichard struct PositiveValueComplexInt { PositiveValueComplexIntPositiveValueComplexInt6589a1d03eSRichard PositiveValueComplexInt() : i() {} 6689a1d03eSRichard // CHECK-FIXES: PositiveValueComplexInt() {} 6789a1d03eSRichard _Complex int i; 6889a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: use default member initializer for 'i' 6989a1d03eSRichard // CHECK-FIXES: _Complex int i = 0; 7089a1d03eSRichard }; 7189a1d03eSRichard 7289a1d03eSRichard struct PositiveValueFloat { PositiveValueFloatPositiveValueFloat7389a1d03eSRichard PositiveValueFloat() : f() {} 7489a1d03eSRichard // CHECK-FIXES: PositiveValueFloat() {} 7589a1d03eSRichard float f; 7689a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:9: warning: use default member initializer for 'f' 7789a1d03eSRichard // CHECK-FIXES: float f = 0.0f; 7889a1d03eSRichard }; 7989a1d03eSRichard 8089a1d03eSRichard struct PositiveValueDouble { PositiveValueDoublePositiveValueDouble8189a1d03eSRichard PositiveValueDouble() : d() {} 8289a1d03eSRichard // CHECK-FIXES: PositiveValueDouble() {} 8389a1d03eSRichard double d; 8489a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: use default member initializer for 'd' 8589a1d03eSRichard // CHECK-FIXES: double d = 0.0; 8689a1d03eSRichard }; 8789a1d03eSRichard 8889a1d03eSRichard struct PositiveDouble { PositiveDoublePositiveDouble8989a1d03eSRichard PositiveDouble() : f(2.5463e43) {} 9089a1d03eSRichard // CHECK-FIXES: PositiveDouble() {} 9189a1d03eSRichard double f; 9289a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: use default member initializer for 'f' 9389a1d03eSRichard // CHECK-FIXES: double f = 2.5463e43; 9489a1d03eSRichard }; 9589a1d03eSRichard 9689a1d03eSRichard struct PositiveValueComplexFloat { PositiveValueComplexFloatPositiveValueComplexFloat9789a1d03eSRichard PositiveValueComplexFloat() : f() {} 9889a1d03eSRichard // CHECK-FIXES: PositiveValueComplexFloat() {} 9989a1d03eSRichard _Complex float f; 10089a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:18: warning: use default member initializer for 'f' 10189a1d03eSRichard // CHECK-FIXES: _Complex float f = 0.0f; 10289a1d03eSRichard }; 10389a1d03eSRichard 10489a1d03eSRichard struct PositiveValueComplexDouble { PositiveValueComplexDoublePositiveValueComplexDouble10589a1d03eSRichard PositiveValueComplexDouble() : f() {} 10689a1d03eSRichard // CHECK-FIXES: PositiveValueComplexDouble() {} 10789a1d03eSRichard _Complex double f; 10889a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:19: warning: use default member initializer for 'f' 10989a1d03eSRichard // CHECK-FIXES: _Complex double f = 0.0; 11089a1d03eSRichard }; 11189a1d03eSRichard 11289a1d03eSRichard struct PositiveUnaryMinusDouble { PositiveUnaryMinusDoublePositiveUnaryMinusDouble11389a1d03eSRichard PositiveUnaryMinusDouble() : f(-2.5463e43) {} 11489a1d03eSRichard // CHECK-FIXES: PositiveUnaryMinusDouble() {} 11589a1d03eSRichard double f; 11689a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: use default member initializer for 'f' 11789a1d03eSRichard // CHECK-FIXES: double f = -2.5463e43; 11889a1d03eSRichard }; 11989a1d03eSRichard 12089a1d03eSRichard struct PositiveUnaryPlusDouble { PositiveUnaryPlusDoublePositiveUnaryPlusDouble12189a1d03eSRichard PositiveUnaryPlusDouble() : f(+2.5463e43) {} 12289a1d03eSRichard // CHECK-FIXES: PositiveUnaryPlusDouble() {} 12389a1d03eSRichard double f; 12489a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: use default member initializer for 'f' 12589a1d03eSRichard // CHECK-FIXES: double f = +2.5463e43; 12689a1d03eSRichard }; 12789a1d03eSRichard 12889a1d03eSRichard struct PositiveValueBool { PositiveValueBoolPositiveValueBool12989a1d03eSRichard PositiveValueBool() : b() {} 13089a1d03eSRichard // CHECK-FIXES: PositiveValueBool() {} 13189a1d03eSRichard bool b; 13289a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:8: warning: use default member initializer for 'b' 13389a1d03eSRichard // CHECK-FIXES: bool b = false; 13489a1d03eSRichard }; 13589a1d03eSRichard 13689a1d03eSRichard struct PositiveBool { PositiveBoolPositiveBool13789a1d03eSRichard PositiveBool() : a(true) {} 13889a1d03eSRichard // CHECK-FIXES: PositiveBool() {} 13989a1d03eSRichard bool a; 14089a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:8: warning: use default member initializer for 'a' 14189a1d03eSRichard // CHECK-FIXES: bool a = true; 14289a1d03eSRichard }; 14389a1d03eSRichard 14489a1d03eSRichard struct PositiveValuePointer { PositiveValuePointerPositiveValuePointer14589a1d03eSRichard PositiveValuePointer() : p() {} 14689a1d03eSRichard // CHECK-FIXES: PositiveValuePointer() {} 14789a1d03eSRichard int *p; 14889a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:8: warning: use default member initializer for 'p' 14989a1d03eSRichard // CHECK-FIXES: int *p = nullptr; 15089a1d03eSRichard }; 15189a1d03eSRichard 15289a1d03eSRichard struct PositiveNullPointer { PositiveNullPointerPositiveNullPointer15389a1d03eSRichard PositiveNullPointer() : q(nullptr) {} 15489a1d03eSRichard // CHECK-FIXES: PositiveNullPointer() {} 15589a1d03eSRichard int *q; 15689a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:8: warning: use default member initializer for 'q' 15789a1d03eSRichard // CHECK-FIXES: int *q = nullptr; 15889a1d03eSRichard }; 15989a1d03eSRichard 16089a1d03eSRichard enum Enum { Foo }; 16189a1d03eSRichard struct PositiveEnum { PositiveEnumPositiveEnum16289a1d03eSRichard PositiveEnum() : e(Foo) {} 16389a1d03eSRichard // CHECK-FIXES: PositiveEnum() {} 16489a1d03eSRichard Enum e; 16589a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:8: warning: use default member initializer for 'e' 16689a1d03eSRichard // CHECK-FIXES: Enum e = Foo; 16789a1d03eSRichard }; 16889a1d03eSRichard 16989a1d03eSRichard struct PositiveValueEnum { PositiveValueEnumPositiveValueEnum17089a1d03eSRichard PositiveValueEnum() : e() {} 17189a1d03eSRichard // CHECK-FIXES: PositiveValueEnum() {} 17289a1d03eSRichard Enum e; 17389a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:8: warning: use default member initializer for 'e' 17489a1d03eSRichard // CHECK-FIXES: Enum e{}; 17589a1d03eSRichard }; 17689a1d03eSRichard 17789a1d03eSRichard struct PositiveString { PositiveStringPositiveString17889a1d03eSRichard PositiveString() : s("foo") {} 17989a1d03eSRichard // CHECK-FIXES: PositiveString() {} 18089a1d03eSRichard const char *s; 18189a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:15: warning: use default member initializer for 's' 18289a1d03eSRichard // CHECK-FIXES: const char *s = "foo"; 18389a1d03eSRichard }; 18489a1d03eSRichard 18589a1d03eSRichard template <typename T> 18689a1d03eSRichard struct NegativeTemplate { NegativeTemplateNegativeTemplate18789a1d03eSRichard NegativeTemplate() : t() {} 18889a1d03eSRichard T t; 18989a1d03eSRichard }; 19089a1d03eSRichard 19189a1d03eSRichard NegativeTemplate<int> nti; 19289a1d03eSRichard NegativeTemplate<double> ntd; 193311091e2SAMS21 194311091e2SAMS21 namespace PR63285 { 195311091e2SAMS21 196311091e2SAMS21 class ArrayValueInit { ArrayValueInit()197311091e2SAMS21 ArrayValueInit() : m_array() {} 198311091e2SAMS21 double m_array[1]; 199311091e2SAMS21 // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: use default member initializer for 'm_array' [modernize-use-default-member-init] 200311091e2SAMS21 // CHECK-FIXES: {{^ }}ArrayValueInit() {} 201311091e2SAMS21 // CHECK-FIXES-NEXT: {{^ }}double m_array[1] = {}; 202311091e2SAMS21 }; 203311091e2SAMS21 204311091e2SAMS21 class ArrayBraceInit { ArrayBraceInit()205311091e2SAMS21 ArrayBraceInit() : m_array{} {} 206311091e2SAMS21 double m_array[1]; 207311091e2SAMS21 // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: use default member initializer for 'm_array' [modernize-use-default-member-init] 208311091e2SAMS21 // CHECK-FIXES: {{^ }}ArrayBraceInit() {} 209311091e2SAMS21 // CHECK-FIXES-NEXT: {{^ }}double m_array[1] = {}; 210311091e2SAMS21 }; 211311091e2SAMS21 212311091e2SAMS21 class ArrayBraceInitWithValue { ArrayBraceInitWithValue()213311091e2SAMS21 ArrayBraceInitWithValue() : m_array{3.14} {} 214311091e2SAMS21 double m_array[1]; 215311091e2SAMS21 // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: use default member initializer for 'm_array' [modernize-use-default-member-init] 216311091e2SAMS21 // CHECK-FIXES: {{^ }}ArrayBraceInitWithValue() {} 217311091e2SAMS21 // CHECK-FIXES-NEXT: {{^ }}double m_array[1] = {3.14}; 218311091e2SAMS21 }; 219311091e2SAMS21 220311091e2SAMS21 class ArrayBraceInitMultipleValues { ArrayBraceInitMultipleValues()221311091e2SAMS21 ArrayBraceInitMultipleValues() : m_array{1.0, 2.0, 3.0} {} 222311091e2SAMS21 double m_array[3]; 223311091e2SAMS21 // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: use default member initializer for 'm_array' [modernize-use-default-member-init] 224311091e2SAMS21 // CHECK-FIXES: {{^ }}ArrayBraceInitMultipleValues() {} 225311091e2SAMS21 // CHECK-FIXES-NEXT: {{^ }}double m_array[3] = {1.0, 2.0, 3.0}; 226311091e2SAMS21 }; 227311091e2SAMS21 228311091e2SAMS21 } // namespace PR63285 229