| // RUN: %check_clang_tidy %s modernize-use-default-member-init %t -- -- -std=c++11 |
| |
| struct S { |
| }; |
| |
| struct PositiveValueChar { |
| PositiveValueChar() : c0(), c1()/*, c2(), c3()*/ {} |
| // CHECK-FIXES: PositiveValueChar() {} |
| const char c0; |
| // CHECK-MESSAGES: :[[@LINE-1]]:14: warning: use default member initializer for 'c0' [modernize-use-default-member-init] |
| // CHECK-FIXES: const char c0{}; |
| wchar_t c1; |
| // CHECK-MESSAGES: :[[@LINE-1]]:11: warning: use default member initializer for 'c1' |
| // CHECK-FIXES: wchar_t c1{}; |
| // FIXME: char16_t c2; |
| // C HECK-MESSAGES: :[[@LINE-1]]:12: warning: use default member initializer for 'c2' |
| // C HECK-FIXES: char16_t c2{}; |
| // FIXME: char32_t c3; |
| // C HECK-MESSAGES: :[[@LINE-1]]:12: warning: use default member initializer for 'c3' |
| // C HECK-FIXES: char32_t c3{}; |
| }; |
| |
| struct PositiveChar { |
| PositiveChar() : d('a') {} |
| // CHECK-FIXES: PositiveChar() {} |
| char d; |
| // CHECK-MESSAGES: :[[@LINE-1]]:8: warning: use default member initializer for 'd' |
| // CHECK-FIXES: char d{'a'}; |
| }; |
| |
| struct PositiveValueInt { |
| PositiveValueInt() : i() {} |
| // CHECK-FIXES: PositiveValueInt() {} |
| const int i; |
| // CHECK-MESSAGES: :[[@LINE-1]]:13: warning: use default member initializer for 'i' |
| // CHECK-FIXES: const int i{}; |
| }; |
| |
| struct PositiveInt { |
| PositiveInt() : j(1) {} |
| // CHECK-FIXES: PositiveInt() {} |
| int j; |
| // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use default member initializer for 'j' |
| // CHECK-FIXES: int j{1}; |
| }; |
| |
| struct PositiveUnaryMinusInt { |
| PositiveUnaryMinusInt() : j(-1) {} |
| // CHECK-FIXES: PositiveUnaryMinusInt() {} |
| int j; |
| // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use default member initializer for 'j' |
| // CHECK-FIXES: int j{-1}; |
| }; |
| |
| struct PositiveUnaryPlusInt { |
| PositiveUnaryPlusInt() : j(+1) {} |
| // CHECK-FIXES: PositiveUnaryPlusInt() {} |
| int j; |
| // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use default member initializer for 'j' |
| // CHECK-FIXES: int j{+1}; |
| }; |
| |
| struct PositiveValueComplexInt { |
| PositiveValueComplexInt() : i() {} |
| // CHECK-FIXES: PositiveValueComplexInt() {} |
| _Complex int i; |
| // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: use default member initializer for 'i' |
| // CHECK-FIXES: _Complex int i{}; |
| }; |
| |
| struct PositiveValueFloat { |
| PositiveValueFloat() : f() {} |
| // CHECK-FIXES: PositiveValueFloat() {} |
| float f; |
| // CHECK-MESSAGES: :[[@LINE-1]]:9: warning: use default member initializer for 'f' |
| // CHECK-FIXES: float f{}; |
| }; |
| |
| struct PositiveValueDouble { |
| PositiveValueDouble() : d() {} |
| // CHECK-FIXES: PositiveValueDouble() {} |
| double d; |
| // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: use default member initializer for 'd' |
| // CHECK-FIXES: double d{}; |
| }; |
| |
| struct PositiveDouble { |
| PositiveDouble() : f(2.5463e43) {} |
| // CHECK-FIXES: PositiveDouble() {} |
| double f; |
| // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: use default member initializer for 'f' |
| // CHECK-FIXES: double f{2.5463e43}; |
| }; |
| |
| struct PositiveValueComplexFloat { |
| PositiveValueComplexFloat() : f() {} |
| // CHECK-FIXES: PositiveValueComplexFloat() {} |
| _Complex float f; |
| // CHECK-MESSAGES: :[[@LINE-1]]:18: warning: use default member initializer for 'f' |
| // CHECK-FIXES: _Complex float f{}; |
| }; |
| |
| struct PositiveValueComplexDouble { |
| PositiveValueComplexDouble() : f() {} |
| // CHECK-FIXES: PositiveValueComplexDouble() {} |
| _Complex double f; |
| // CHECK-MESSAGES: :[[@LINE-1]]:19: warning: use default member initializer for 'f' |
| // CHECK-FIXES: _Complex double f{}; |
| }; |
| |
| struct PositiveUnaryMinusDouble { |
| PositiveUnaryMinusDouble() : f(-2.5463e43) {} |
| // CHECK-FIXES: PositiveUnaryMinusDouble() {} |
| double f; |
| // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: use default member initializer for 'f' |
| // CHECK-FIXES: double f{-2.5463e43}; |
| }; |
| |
| struct PositiveUnaryPlusDouble { |
| PositiveUnaryPlusDouble() : f(+2.5463e43) {} |
| // CHECK-FIXES: PositiveUnaryPlusDouble() {} |
| double f; |
| // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: use default member initializer for 'f' |
| // CHECK-FIXES: double f{+2.5463e43}; |
| }; |
| |
| struct PositiveValueBool { |
| PositiveValueBool() : b() {} |
| // CHECK-FIXES: PositiveValueBool() {} |
| bool b; |
| // CHECK-MESSAGES: :[[@LINE-1]]:8: warning: use default member initializer for 'b' |
| // CHECK-FIXES: bool b{}; |
| }; |
| |
| struct PositiveBool { |
| PositiveBool() : a(true) {} |
| // CHECK-FIXES: PositiveBool() {} |
| bool a; |
| // CHECK-MESSAGES: :[[@LINE-1]]:8: warning: use default member initializer for 'a' |
| // CHECK-FIXES: bool a{true}; |
| }; |
| |
| struct PositiveValuePointer { |
| PositiveValuePointer() : p() {} |
| // CHECK-FIXES: PositiveValuePointer() {} |
| int *p; |
| // CHECK-MESSAGES: :[[@LINE-1]]:8: warning: use default member initializer for 'p' |
| // CHECK-FIXES: int *p{}; |
| }; |
| |
| struct PositiveNullPointer { |
| PositiveNullPointer() : q(nullptr) {} |
| // CHECK-FIXES: PositiveNullPointer() {} |
| int *q; |
| // CHECK-MESSAGES: :[[@LINE-1]]:8: warning: use default member initializer for 'q' |
| // CHECK-FIXES: int *q{nullptr}; |
| }; |
| |
| enum Enum { Foo, Bar }; |
| struct PositiveEnum { |
| PositiveEnum() : e(Foo) {} |
| // CHECK-FIXES: PositiveEnum() {} |
| Enum e; |
| // CHECK-MESSAGES: :[[@LINE-1]]:8: warning: use default member initializer for 'e' |
| // CHECK-FIXES: Enum e{Foo}; |
| }; |
| |
| struct PositiveString { |
| PositiveString() : s("foo") {} |
| // CHECK-FIXES: PositiveString() {} |
| const char *s; |
| // CHECK-MESSAGES: :[[@LINE-1]]:15: warning: use default member initializer for 's' |
| // CHECK-FIXES: const char *s{"foo"}; |
| }; |
| |
| struct PositiveStruct { |
| PositiveStruct() : s(7) {} |
| // CHECK-FIXES: PositiveStruct() {} |
| struct { |
| int s; |
| // CHECK-MESSAGES: :[[@LINE-1]]:9: warning: use default member initializer for 's' |
| // CHECK-FIXES: int s{7}; |
| }; |
| }; |
| |
| template <typename T> |
| struct NegativeTemplate { |
| NegativeTemplate() : t() {} |
| T t; |
| }; |
| |
| NegativeTemplate<int> nti; |
| NegativeTemplate<double> ntd; |
| |
| struct NegativeDefaultMember { |
| NegativeDefaultMember() {} |
| int i = 2; |
| }; |
| |
| struct NegativeClass : S { |
| NegativeClass() : s() {} |
| S s; |
| }; |
| |
| struct NegativeBase : S { |
| NegativeBase() : S() {} |
| }; |
| |
| struct NegativeDefaultOtherMember{ |
| NegativeDefaultOtherMember() : i(3) {} |
| int i = 4; |
| }; |
| |
| struct NegativeUnion { |
| NegativeUnion() : d(5.0) {} |
| union { |
| int i; |
| double d; |
| }; |
| }; |
| |
| struct NegativeBitField |
| { |
| NegativeBitField() : i(6) {} |
| int i : 5; |
| }; |
| |
| struct NegativeNotDefaultInt |
| { |
| NegativeNotDefaultInt(int) : i(7) {} |
| int i; |
| }; |
| |
| struct NegativeDefaultArg |
| { |
| NegativeDefaultArg(int i = 4) : i(i) {} |
| int i; |
| }; |
| |
| struct ExistingChar { |
| ExistingChar(short) : e1(), e2(), e3(), e4() {} |
| // CHECK-MESSAGES: :[[@LINE-1]]:25: warning: member initializer for 'e1' is redundant [modernize-use-default-member-init] |
| // CHECK-MESSAGES: :[[@LINE-2]]:31: warning: member initializer for 'e2' is redundant |
| // CHECK-MESSAGES: :[[@LINE-3]]:37: warning: member initializer for 'e3' is redundant |
| // CHECK-FIXES: ExistingChar(short) : e4() {} |
| ExistingChar(int) : e1(0), e2(0), e3(0), e4(0) {} |
| // CHECK-MESSAGES: :[[@LINE-1]]:23: warning: member initializer for 'e1' is redundant |
| // CHECK-MESSAGES: :[[@LINE-2]]:30: warning: member initializer for 'e2' is redundant |
| // CHECK-MESSAGES: :[[@LINE-3]]:37: warning: member initializer for 'e3' is redundant |
| // CHECK-FIXES: ExistingChar(int) : e4(0) {} |
| ExistingChar(long) : e1('\0'), e2('\0'), e3('\0'), e4('\0') {} |
| // CHECK-MESSAGES: :[[@LINE-1]]:24: warning: member initializer for 'e1' is redundant |
| // CHECK-MESSAGES: :[[@LINE-2]]:34: warning: member initializer for 'e2' is redundant |
| // CHECK-MESSAGES: :[[@LINE-3]]:44: warning: member initializer for 'e3' is redundant |
| // CHECK-FIXES: ExistingChar(long) : e4('\0') {} |
| ExistingChar(char) : e1('a'), e2('a'), e3('a'), e4('a') {} |
| // CHECK-MESSAGES: :[[@LINE-1]]:51: warning: member initializer for 'e4' is redundant |
| // CHECK-FIXES: ExistingChar(char) : e1('a'), e2('a'), e3('a') {} |
| char e1{}; |
| char e2 = 0; |
| char e3 = '\0'; |
| char e4 = 'a'; |
| }; |
| |
| struct ExistingInt { |
| ExistingInt(short) : e1(), e2(), e3(), e4(), e5(), e6() {} |
| // CHECK-MESSAGES: :[[@LINE-1]]:24: warning: member initializer for 'e1' is redundant [modernize-use-default-member-init] |
| // CHECK-MESSAGES: :[[@LINE-2]]:30: warning: member initializer for 'e2' is redundant |
| // CHECK-FIXES: ExistingInt(short) : e3(), e4(), e5(), e6() {} |
| ExistingInt(int) : e1(0), e2(0), e3(0), e4(0), e5(0), e6(0) {} |
| // CHECK-MESSAGES: :[[@LINE-1]]:22: warning: member initializer for 'e1' is redundant |
| // CHECK-MESSAGES: :[[@LINE-2]]:29: warning: member initializer for 'e2' is redundant |
| // CHECK-FIXES: ExistingInt(int) : e3(0), e4(0), e5(0), e6(0) {} |
| ExistingInt(long) : e1(5), e2(5), e3(5), e4(5), e5(5), e6(5) {} |
| // CHECK-MESSAGES: :[[@LINE-1]]:37: warning: member initializer for 'e3' is redundant |
| // CHECK-MESSAGES: :[[@LINE-2]]:44: warning: member initializer for 'e4' is redundant |
| // CHECK-MESSAGES: :[[@LINE-3]]:58: warning: member initializer for 'e6' is redundant |
| // CHECK-FIXES: ExistingInt(long) : e1(5), e2(5), e5(5) {} |
| ExistingInt(char) : e1(-5), e2(-5), e3(-5), e4(-5), e5(-5), e6(-5) {} |
| // CHECK-MESSAGES: :[[@LINE-1]]:55: warning: member initializer for 'e5' is redundant |
| // CHECK-FIXES: ExistingInt(char) : e1(-5), e2(-5), e3(-5), e4(-5), e6(-5) {} |
| int e1{}; |
| int e2 = 0; |
| int e3 = {5}; |
| int e4 = 5; |
| int e5 = -5; |
| int e6 = +5; |
| }; |
| |
| struct ExistingDouble { |
| ExistingDouble(short) : e1(), e2(), e3(), e4(), e5() {} |
| // CHECK-MESSAGES: :[[@LINE-1]]:27: warning: member initializer for 'e1' is redundant |
| // CHECK-MESSAGES: :[[@LINE-2]]:33: warning: member initializer for 'e2' is redundant |
| // CHECK-FIXES: ExistingDouble(short) : e3(), e4(), e5() {} |
| ExistingDouble(int) : e1(0.0), e2(0.0), e3(0.0), e4(0.0), e5(0.0) {} |
| // CHECK-MESSAGES: :[[@LINE-1]]:25: warning: member initializer for 'e1' is redundant |
| // CHECK-MESSAGES: :[[@LINE-2]]:34: warning: member initializer for 'e2' is redundant |
| // CHECK-FIXES: ExistingDouble(int) : e3(0.0), e4(0.0), e5(0.0) {} |
| ExistingDouble(long) : e1(5.0), e2(5.0), e3(5.0), e4(5.0), e5(5.0) {} |
| // CHECK-MESSAGES: :[[@LINE-1]]:44: warning: member initializer for 'e3' is redundant |
| // CHECK-MESSAGES: :[[@LINE-2]]:62: warning: member initializer for 'e5' is redundant |
| // CHECK-FIXES: ExistingDouble(long) : e1(5.0), e2(5.0), e4(5.0) {} |
| ExistingDouble(char) : e1(-5.0), e2(-5.0), e3(-5.0), e4(-5.0), e5(-5.0) {} |
| // CHECK-MESSAGES: :[[@LINE-1]]:56: warning: member initializer for 'e4' is redundant |
| // CHECK-FIXES: ExistingDouble(char) : e1(-5.0), e2(-5.0), e3(-5.0), e5(-5.0) {} |
| double e1{}; |
| double e2 = 0.0; |
| double e3 = 5.0; |
| double e4 = -5.0; |
| double e5 = +5.0; |
| }; |
| |
| struct ExistingBool { |
| ExistingBool(short) : e1(), e2(), e3() {} |
| // CHECK-MESSAGES: :[[@LINE-1]]:25: warning: member initializer for 'e1' is redundant |
| // CHECK-MESSAGES: :[[@LINE-2]]:31: warning: member initializer for 'e2' is redundant |
| // CHECK-FIXES: ExistingBool(short) : e3() {} |
| ExistingBool(int) : e1(false), e2(false), e3(false) {} |
| // CHECK-MESSAGES: :[[@LINE-1]]:23: warning: member initializer for 'e1' is redundant |
| // CHECK-MESSAGES: :[[@LINE-2]]:34: warning: member initializer for 'e2' is redundant |
| // CHECK-FIXES: ExistingBool(int) : e3(false) {} |
| ExistingBool(long) : e1(true), e2(true), e3(true) {} |
| // CHECK-MESSAGES: :[[@LINE-1]]:44: warning: member initializer for 'e3' is redundant |
| // CHECK-FIXES: ExistingBool(long) : e1(true), e2(true) {} |
| bool e1{}; |
| bool e2 = false; |
| bool e3 = true; |
| }; |
| |
| struct ExistingEnum { |
| ExistingEnum(short) : e1(Foo), e2(Foo) {} |
| // CHECK-MESSAGES: :[[@LINE-1]]:25: warning: member initializer for 'e1' is redundant |
| // CHECK-FIXES: ExistingEnum(short) : e2(Foo) {} |
| ExistingEnum(int) : e1(Bar), e2(Bar) {} |
| // CHECK-MESSAGES: :[[@LINE-1]]:32: warning: member initializer for 'e2' is redundant |
| // CHECK-FIXES: ExistingEnum(int) : e1(Bar) {} |
| Enum e1 = Foo; |
| Enum e2{Bar}; |
| }; |
| |
| struct ExistingPointer { |
| ExistingPointer(short) : e1(), e2(), e3(), e4() {} |
| // CHECK-MESSAGES: :[[@LINE-1]]:28: warning: member initializer for 'e1' is redundant |
| // CHECK-MESSAGES: :[[@LINE-2]]:34: warning: member initializer for 'e2' is redundant |
| // CHECK-MESSAGES: :[[@LINE-3]]:40: warning: member initializer for 'e3' is redundant |
| // CHECK-FIXES: ExistingPointer(short) : e4() {} |
| ExistingPointer(int) : e1(0), e2(0), e3(0), e4(&e1) {} |
| // CHECK-MESSAGES: :[[@LINE-1]]:26: warning: member initializer for 'e1' is redundant |
| // CHECK-MESSAGES: :[[@LINE-2]]:33: warning: member initializer for 'e2' is redundant |
| // CHECK-MESSAGES: :[[@LINE-3]]:40: warning: member initializer for 'e3' is redundant |
| // CHECK-FIXES: ExistingPointer(int) : e4(&e1) {} |
| ExistingPointer(long) : e1(nullptr), e2(nullptr), e3(nullptr), e4(&e2) {} |
| // CHECK-MESSAGES: :[[@LINE-1]]:27: warning: member initializer for 'e1' is redundant |
| // CHECK-MESSAGES: :[[@LINE-2]]:40: warning: member initializer for 'e2' is redundant |
| // CHECK-MESSAGES: :[[@LINE-3]]:53: warning: member initializer for 'e3' is redundant |
| // CHECK-FIXES: ExistingPointer(long) : e4(&e2) {} |
| int *e1{}; |
| int *e2 = 0; |
| int *e3 = nullptr; |
| int **e4 = &e1; |
| }; |
| |
| struct ExistingString { |
| ExistingString(short) : e1(), e2(), e3(), e4() {} |
| // CHECK-MESSAGES: :[[@LINE-1]]:27: warning: member initializer for 'e1' is redundant [modernize-use-default-member-init] |
| // CHECK-MESSAGES: :[[@LINE-2]]:33: warning: member initializer for 'e2' is redundant |
| // CHECK-FIXES: ExistingString(short) : e3(), e4() {} |
| ExistingString(int) : e1(0), e2(0), e3(0), e4(0) {} |
| // CHECK-MESSAGES: :[[@LINE-1]]:25: warning: member initializer for 'e1' is redundant |
| // CHECK-MESSAGES: :[[@LINE-2]]:32: warning: member initializer for 'e2' is redundant |
| // CHECK-FIXES: ExistingString(int) : e3(0), e4(0) {} |
| ExistingString(long) : e1(nullptr), e2(nullptr), e3(nullptr), e4(nullptr) {} |
| // CHECK-MESSAGES: :[[@LINE-1]]:26: warning: member initializer for 'e1' is redundant |
| // CHECK-MESSAGES: :[[@LINE-2]]:39: warning: member initializer for 'e2' is redundant |
| // CHECK-FIXES: ExistingString(long) : e3(nullptr), e4(nullptr) {} |
| ExistingString(char) : e1("foo"), e2("foo"), e3("foo"), e4("foo") {} |
| // CHECK-MESSAGES: :[[@LINE-1]]:48: warning: member initializer for 'e3' is redundant |
| // CHECK-FIXES: ExistingString(char) : e1("foo"), e2("foo"), e4("foo") {} |
| const char *e1{}; |
| const char *e2 = nullptr; |
| const char *e3 = "foo"; |
| const char *e4 = "bar"; |
| }; |
| |
| template <typename T> |
| struct NegativeTemplateExisting { |
| NegativeTemplateExisting(int) : t(0) {} |
| T t{}; |
| }; |
| |
| NegativeTemplateExisting<int> ntei(0); |
| NegativeTemplateExisting<double> nted(0); |
| |
| // This resulted in a warning by default. |
| #define MACRO() \ |
| struct MacroS { \ |
| void *P; \ |
| MacroS() : P(nullptr) {} \ |
| }; |
| |
| MACRO(); |